coverage-report

Code coverage report for All files

npmtest-modernizr (v2017.4.26)

Code coverage report for All files

Statements: 22.45% (638 / 2842)      Branches: 14.31% (177 / 1237)      Functions: 5.42% (37 / 683)      Lines: 22.48% (636 / 2829)      Ignored: 37 statements, 3 functions, 37 branches     

File Statements Branches Functions Lines
node-npmtest-modernizr/ 100% (153 / 153) 100% (126 / 126) 100% (28 / 28) 100% (153 / 153)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/ 16.12% (69 / 428) 0% (0 / 169) 0% (0 / 121) 16.16% (69 / 427)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/a/ 50% (1 / 2) 0% (0 / 2) 0% (0 / 1) 50% (1 / 2)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/audio/ 8.7% (4 / 46) 0% (0 / 20) 0% (0 / 7) 8.7% (4 / 46)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/battery/ 20% (1 / 5) 0% (0 / 3) 0% (0 / 2) 20% (1 / 5)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/canvas/ 11.11% (3 / 27) 0% (0 / 10) 0% (0 / 8) 11.11% (3 / 27)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/crypto/ 12.5% (1 / 8) 0% (0 / 7) 0% (0 / 1) 12.5% (1 / 8)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/ 15.49% (81 / 523) 0% (0 / 137) 0% (0 / 138) 15.55% (81 / 521)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/dom/ 27.59% (8 / 29) 0% (0 / 6) 0% (0 / 13) 27.59% (8 / 29)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/ 18.31% (13 / 71) 0% (0 / 13) 0% (0 / 18) 18.31% (13 / 71)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/es5/ 19.15% (9 / 47) 0% (0 / 47) 0% (0 / 18) 19.57% (9 / 46)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/es6/ 30.3% (10 / 33) 0% (0 / 57) 0% (0 / 15) 31.25% (10 / 32)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/event/ 7.69% (2 / 26) 0% (0 / 4) 0% (0 / 4) 7.69% (2 / 26)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/file/ 50% (2 / 4) 0% (0 / 3) 0% (0 / 2) 50% (2 / 4)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/forms/ 8.7% (8 / 92) 0% (0 / 34) 0% (0 / 17) 8.89% (8 / 90)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/iframe/ 50% (3 / 6) 100% (0 / 0) 0% (0 / 3) 50% (3 / 6)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/img/ 13.48% (12 / 89) 0% (0 / 22) 0% (0 / 32) 13.48% (12 / 89)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/input/ 50% (4 / 8) 100% (0 / 0) 0% (0 / 4) 50% (4 / 8)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/mediaquery/ 50% (2 / 4) 100% (0 / 0) 0% (0 / 2) 50% (2 / 4)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/ 37.93% (11 / 29) 0% (0 / 9) 0% (0 / 13) 37.93% (11 / 29)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/script/ 50% (2 / 4) 100% (0 / 0) 0% (0 / 2) 50% (2 / 4)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/speech/ 50% (2 / 4) 100% (0 / 0) 0% (0 / 2) 50% (2 / 4)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/storage/ 16.67% (3 / 18) 100% (0 / 0) 0% (0 / 5) 16.67% (3 / 18)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/style/ 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/svg/ 27.27% (6 / 22) 0% (0 / 11) 0% (0 / 11) 27.27% (6 / 22)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/textarea/ 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/url/ 12.5% (5 / 40) 0% (0 / 13) 0% (0 / 12) 12.5% (5 / 40)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/video/ 10.87% (5 / 46) 0% (0 / 17) 0% (0 / 7) 10.87% (5 / 46)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/webgl/ 5.56% (1 / 18) 0% (0 / 6) 0% (0 / 2) 5.56% (1 / 18)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/webrtc/ 21.43% (3 / 14) 0% (0 / 4) 0% (0 / 4) 21.43% (3 / 14)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/websockets/ 10% (1 / 10) 0% (0 / 6) 0% (0 / 2) 10% (1 / 10)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/window/ 50% (3 / 6) 0% (0 / 2) 0% (0 / 3) 50% (3 / 6)
node-npmtest-modernizr/node_modules/modernizr/feature-detects/workers/ 11.54% (9 / 78) 0% (0 / 32) 0% (0 / 17) 11.54% (9 / 78)
node-npmtest-modernizr/node_modules/modernizr/lib/ 49.5% (100 / 202) 40% (44 / 110) 25% (7 / 28) 49.75% (98 / 197)
node-npmtest-modernizr/node_modules/modernizr/src/ 13.27% (99 / 746) 1.91% (7 / 367) 1.44% (2 / 139) 13.29% (99 / 745)
Code coverage report for node-npmtest-modernizr/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/

Statements: 100% (153 / 153)      Branches: 100% (126 / 126)      Functions: 100% (28 / 28)      Lines: 100% (153 / 153)      Ignored: 26 statements, 1 function, 30 branches     

All files » node-npmtest-modernizr/
File Statements Branches Functions Lines
example.js 100% (83 / 83) 100% (73 / 73) 100% (12 / 12) 100% (83 / 83)
lib.npmtest_modernizr.js 100% (16 / 16) 100% (14 / 14) 100% (3 / 3) 100% (16 / 16)
test.js 100% (54 / 54) 100% (39 / 39) 100% (13 / 13) 100% (54 / 54)
Code coverage report for node-npmtest-modernizr/example.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/example.js

Statements: 100% (83 / 83)      Branches: 100% (73 / 73)      Functions: 100% (12 / 12)      Lines: 100% (83 / 83)      Ignored: 26 statements, 1 function, 30 branches     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328                                                  2   2         2   2   2 2 2         1             2       2       2   2               1 2           2     2     2 2   1       2     1 1 1   1 1     1 1   1     1   2           1   1   1         1 2 2 3 3 3 3 1     3 3         3       1 3 1       1 1               1   1 1 1   1   1                                                                                                                                                                                       1 1                       1     6 6   1   2   1   2         1 1   1         1             1     1 1     1 1   1 1 1 1 1 1 1   1 1   1        
/*
example.js
 
quickstart example
 
instruction
    1. save this script as example.js
    2. run the shell command:
        $ npm install npmtest-modernizr && PORT=8081 node example.js
    3. play with the browser-demo on http://127.0.0.1:8081
*/
 
 
 
/* istanbul instrument in package npmtest_modernizr */
/*jslint
    bitwise: true,
    browser: true,
    maxerr: 8,
    maxlen: 96,
    node: true,
    nomen: true,
    regexp: true,
    stupid: true
*/
(function () {
    'use strict';
    var local;
 
 
 
    // run shared js-env code - init-before
    (function () {
        // init local
        local = {};
        // init modeJs
        local.modeJs = (function () {
            try {
                return typeof navigator.userAgent === 'string' &&
                    typeof document.querySelector('body') === 'object' &&
                    typeof XMLHttpRequest.prototype.open === 'function' &&
                    'browser';
            } catch (errorCaughtBrowser) {
                return module.exports &&
                    typeof process.versions.node === 'string' &&
                    typeof require('http').createServer === 'function' &&
                    'node';
            }
        }());
        // init global
        local.global = local.modeJs === 'browser'
            ? window
            : global;
        // init utility2_rollup
        local = local.global.utility2_rollup || (local.modeJs === 'browser'
            ? local.global.utility2_npmtest_modernizr
            : global.utility2_moduleExports);
        // export local
        local.global.local = local;
    }());
    switch (local.modeJs) {
 
 
 
    // init-after
    // run browser js-env code - init-after
    /* istanbul ignore next */
    case 'browser':
        local.testRunBrowser = function (event) {
            Eif (!event || (event &&
                    event.currentTarget &&
                    event.currentTarget.className &&
                    event.currentTarget.className.includes &&
                    event.currentTarget.className.includes('onreset'))) {
                // reset output
                Array.from(
                    document.querySelectorAll('body > .resettable')
                ).forEach(function (element) {
                    switch (element.tagName) {
                    case 'INPUT':
                    case 'TEXTAREA':
                        element.value = '';
                        break;
                    default:
                        element.textContent = '';
                    }
                });
            }
            switch (event && event.currentTarget && event.currentTarget.id) {
            case 'testRunButton1':
                // show tests
                Eif (document.querySelector('#testReportDiv1').style.display === 'none') {
                    document.querySelector('#testReportDiv1').style.display = 'block';
                    document.querySelector('#testRunButton1').textContent =
                        'hide internal test';
                    local.modeTest = true;
                    local.testRunDefault(local);
                // hide tests
                } else {
                    document.querySelector('#testReportDiv1').style.display = 'none';
                    document.querySelector('#testRunButton1').textContent = 'run internal test';
                }
                break;
            // custom-case
            default:
                break;
            }
            Iif (document.querySelector('#inputTextareaEval1') && (!event || (event &&
                    event.currentTarget &&
                    event.currentTarget.className &&
                    event.currentTarget.className.includes &&
                    event.currentTarget.className.includes('oneval')))) {
                // try to eval input-code
                try {
                    /*jslint evil: true*/
                    eval(document.querySelector('#inputTextareaEval1').value);
                } catch (errorCaught) {
                    console.error(errorCaught);
                }
            }
        };
        // log stderr and stdout to #outputTextareaStdout1
        ['error', 'log'].forEach(function (key) {
            console[key + '_original'] = console[key];
            console[key] = function () {
                var element;
                console[key + '_original'].apply(console, arguments);
                element = document.querySelector('#outputTextareaStdout1');
                Iif (!element) {
                    return;
                }
                // append text to #outputTextareaStdout1
                element.value += Array.from(arguments).map(function (arg) {
                    return typeof arg === 'string'
                        ? arg
                        : JSON.stringify(arg, null, 4);
                }).join(' ') + '\n';
                // scroll textarea to bottom
                element.scrollTop = element.scrollHeight;
            };
        });
        // init event-handling
        ['change', 'click', 'keyup'].forEach(function (event) {
            Array.from(document.querySelectorAll('.on' + event)).forEach(function (element) {
                element.addEventListener(event, local.testRunBrowser);
            });
        });
        // run tests
        local.testRunBrowser();
        break;
 
 
 
    // run node js-env code - init-after
    /* istanbul ignore next */
    case 'node':
        // export local
        module.exports = local;
        // require modules
        local.fs = require('fs');
        local.http = require('http');
        local.url = require('url');
        // init assets
        local.assetsDict = local.assetsDict || {};
        /* jslint-ignore-begin */
        local.assetsDict['/assets.index.template.html'] = '\
<!doctype html>\n\
<html lang="en">\n\
<head>\n\
<meta charset="UTF-8">\n\
<meta name="viewport" content="width=device-width, initial-scale=1">\n\
<title>{{env.npm_package_name}} (v{{env.npm_package_version}})</title>\n\
<style>\n\
/*csslint\n\
    box-sizing: false,\n\
    universal-selector: false\n\
*/\n\
* {\n\
    box-sizing: border-box;\n\
}\n\
body {\n\
    background: #dde;\n\
    font-family: Arial, Helvetica, sans-serif;\n\
    margin: 2rem;\n\
}\n\
body > * {\n\
    margin-bottom: 1rem;\n\
}\n\
.utility2FooterDiv {\n\
    margin-top: 20px;\n\
    text-align: center;\n\
}\n\
</style>\n\
<style>\n\
/*csslint\n\
*/\n\
textarea {\n\
    font-family: monospace;\n\
    height: 10rem;\n\
    width: 100%;\n\
}\n\
textarea[readonly] {\n\
    background: #ddd;\n\
}\n\
</style>\n\
</head>\n\
<body>\n\
<!-- utility2-comment\n\
<div id="ajaxProgressDiv1" style="background: #d00; height: 2px; left: 0; margin: 0; padding: 0; position: fixed; top: 0; transition: background 0.5s, width 1.5s; width: 25%;"></div>\n\
utility2-comment -->\n\
<h1>\n\
<!-- utility2-comment\n\
    <a\n\
        {{#if env.npm_package_homepage}}\n\
        href="{{env.npm_package_homepage}}"\n\
        {{/if env.npm_package_homepage}}\n\
        target="_blank"\n\
    >\n\
utility2-comment -->\n\
        {{env.npm_package_name}} (v{{env.npm_package_version}})\n\
<!-- utility2-comment\n\
    </a>\n\
utility2-comment -->\n\
</h1>\n\
<h3>{{env.npm_package_description}}</h3>\n\
<!-- utility2-comment\n\
<h4><a download href="assets.app.js">download standalone app</a></h4>\n\
<button class="onclick onreset" id="testRunButton1">run internal test</button><br>\n\
<div id="testReportDiv1" style="display: none;"></div>\n\
utility2-comment -->\n\
\n\
\n\
\n\
<label>stderr and stdout</label>\n\
<textarea class="resettable" id="outputTextareaStdout1" readonly></textarea>\n\
<!-- utility2-comment\n\
{{#if isRollup}}\n\
<script src="assets.app.js"></script>\n\
{{#unless isRollup}}\n\
utility2-comment -->\n\
<script src="assets.utility2.rollup.js"></script>\n\
<script src="jsonp.utility2._stateInit?callback=window.utility2._stateInit"></script>\n\
<script src="assets.npmtest_modernizr.rollup.js"></script>\n\
<script src="assets.example.js"></script>\n\
<script src="assets.test.js"></script>\n\
<!-- utility2-comment\n\
{{/if isRollup}}\n\
utility2-comment -->\n\
<div class="utility2FooterDiv">\n\
    [ this app was created with\n\
    <a href="https://github.com/kaizhu256/node-utility2" target="_blank">utility2</a>\n\
    ]\n\
</div>\n\
</body>\n\
</html>\n\
';
        /* jslint-ignore-end */
        Iif (local.templateRender) {
            local.assetsDict['/'] = local.templateRender(
                local.assetsDict['/assets.index.template.html'],
                {
                    env: local.objectSetDefault(local.env, {
                        npm_package_description: 'the greatest app in the world!',
                        npm_package_name: 'my-app',
                        npm_package_nameAlias: 'my_app',
                        npm_package_version: '0.0.1'
                    })
                }
            );
        } else {
            local.assetsDict['/'] = local.assetsDict['/assets.index.template.html']
                .replace((/\{\{env\.(\w+?)\}\}/g), function (match0, match1) {
                    // jslint-hack
                    String(match0);
                    switch (match1) {
                    case 'npm_package_description':
                        return 'the greatest app in the world!';
                    case 'npm_package_name':
                        return 'my-app';
                    case 'npm_package_nameAlias':
                        return 'my_app';
                    case 'npm_package_version':
                        return '0.0.1';
                    }
                });
        }
        // run the cli
        Eif (local.global.utility2_rollup || module !== require.main) {
            break;
        }
        local.assetsDict['/assets.example.js'] =
            local.assetsDict['/assets.example.js'] ||
            local.fs.readFileSync(__filename, 'utf8');
        // bug-workaround - long $npm_package_buildCustomOrg
        /* jslint-ignore-begin */
        local.assetsDict['/assets.npmtest_modernizr.rollup.js'] =
            local.assetsDict['/assets.npmtest_modernizr.rollup.js'] ||
            local.fs.readFileSync(
                local.npmtest_modernizr.__dirname + '/lib.npmtest_modernizr.js',
                'utf8'
            ).replace((/^#!/), '//');
        /* jslint-ignore-end */
        local.assetsDict['/favicon.ico'] = local.assetsDict['/favicon.ico'] || '';
        // if $npm_config_timeout_exit exists,
        // then exit this process after $npm_config_timeout_exit ms
        if (Number(process.env.npm_config_timeout_exit)) {
            setTimeout(process.exit, Number(process.env.npm_config_timeout_exit));
        }
        // start server
        if (local.global.utility2_serverHttp1) {
            break;
        }
        process.env.PORT = process.env.PORT || '8081';
        console.error('server starting on port ' + process.env.PORT);
        local.http.createServer(function (request, response) {
            request.urlParsed = local.url.parse(request.url);
            if (local.assetsDict[request.urlParsed.pathname] !== undefined) {
                response.end(local.assetsDict[request.urlParsed.pathname]);
                return;
            }
            response.statusCode = 404;
            response.end();
        }).listen(process.env.PORT);
        break;
    }
}());
 
 
Code coverage report for node-npmtest-modernizr/lib.npmtest_modernizr.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/lib.npmtest_modernizr.js

Statements: 100% (16 / 16)      Branches: 100% (14 / 14)      Functions: 100% (3 / 3)      Lines: 100% (16 / 16)      Ignored: none     

All files » node-npmtest-modernizr/ » lib.npmtest_modernizr.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55                      2   2         2   2   2 2 2         1             2       2   2   2 1   1 1 1          
/* istanbul instrument in package npmtest_modernizr */
/*jslint
    bitwise: true,
    browser: true,
    maxerr: 8,
    maxlen: 96,
    node: true,
    nomen: true,
    regexp: true,
    stupid: true
*/
(function () {
    'use strict';
    var local;
 
 
 
    // run shared js-env code - init-before
    (function () {
        // init local
        local = {};
        // init modeJs
        local.modeJs = (function () {
            try {
                return typeof navigator.userAgent === 'string' &&
                    typeof document.querySelector('body') === 'object' &&
                    typeof XMLHttpRequest.prototype.open === 'function' &&
                    'browser';
            } catch (errorCaughtBrowser) {
                return module.exports &&
                    typeof process.versions.node === 'string' &&
                    typeof require('http').createServer === 'function' &&
                    'node';
            }
        }());
        // init global
        local.global = local.modeJs === 'browser'
            ? window
            : global;
        // init utility2_rollup
        local = local.global.utility2_rollup || local;
        // init lib
        local.local = local.npmtest_modernizr = local;
        // init exports
        if (local.modeJs === 'browser') {
            local.global.utility2_npmtest_modernizr = local;
        } else {
            module.exports = local;
            module.exports.__dirname = __dirname;
            module.exports.module = module;
        }
    }());
}());
 
 
Code coverage report for node-npmtest-modernizr/test.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/test.js

Statements: 100% (54 / 54)      Branches: 100% (39 / 39)      Functions: 100% (13 / 13)      Lines: 100% (54 / 54)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197                      2   2         2   2   2 2 2         1             2     2     1       1     1   1     2           2 2   2           1           1           2 2   2           1             1       1     1             1             1 1     1             1 1 1 1 1 1     1         2 2     1             2 2     1             2 2     1             2 2     1             1 1       1 1        
/* istanbul instrument in package npmtest_modernizr */
/*jslint
    bitwise: true,
    browser: true,
    maxerr: 8,
    maxlen: 96,
    node: true,
    nomen: true,
    regexp: true,
    stupid: true
*/
(function () {
    'use strict';
    var local;
 
 
 
    // run shared js-env code - init-before
    (function () {
        // init local
        local = {};
        // init modeJs
        local.modeJs = (function () {
            try {
                return typeof navigator.userAgent === 'string' &&
                    typeof document.querySelector('body') === 'object' &&
                    typeof XMLHttpRequest.prototype.open === 'function' &&
                    'browser';
            } catch (errorCaughtBrowser) {
                return module.exports &&
                    typeof process.versions.node === 'string' &&
                    typeof require('http').createServer === 'function' &&
                    'node';
            }
        }());
        // init global
        local.global = local.modeJs === 'browser'
            ? window
            : global;
        switch (local.modeJs) {
        // re-init local from window.local
        case 'browser':
            local = local.global.utility2.objectSetDefault(
                local.global.utility2_rollup || local.global.local,
                local.global.utility2
            );
            break;
        // re-init local from example.js
        case 'node':
            local = (local.global.utility2_rollup || require('utility2'))
                .requireReadme();
            break;
        }
        // export local
        local.global.local = local;
    }());
 
 
 
    // run shared js-env code - function
    (function () {
        return;
    }());
    switch (local.modeJs) {
 
 
 
    // run browser js-env code - function
    case 'browser':
        break;
 
 
 
    // run node js-env code - function
    case 'node':
        break;
    }
 
 
 
    // run shared js-env code - init-after
    (function () {
        return;
    }());
    switch (local.modeJs) {
 
 
 
    // run browser js-env code - init-after
    case 'browser':
        local.testCase_browser_nullCase = local.testCase_browser_nullCase || function (
            options,
            onError
        ) {
        /*
         * this function will test browsers's null-case handling-behavior-behavior
         */
            onError(null, options);
        };
 
        // run tests
        local.nop(local.modeTest &&
            document.querySelector('#testRunButton1') &&
            document.querySelector('#testRunButton1').click());
        break;
 
 
 
    // run node js-env code - init-after
    /* istanbul ignore next */
    case 'node':
        local.testCase_buildApidoc_default = local.testCase_buildApidoc_default || function (
            options,
            onError
        ) {
        /*
         * this function will test buildApidoc's default handling-behavior-behavior
         */
            options = { modulePathList: module.paths };
            local.buildApidoc(options, onError);
        };
 
        local.testCase_buildApp_default = local.testCase_buildApp_default || function (
            options,
            onError
        ) {
        /*
         * this function will test buildApp's default handling-behavior-behavior
         */
            local.testCase_buildReadme_default(options, local.onErrorThrow);
            local.testCase_buildLib_default(options, local.onErrorThrow);
            local.testCase_buildTest_default(options, local.onErrorThrow);
            local.testCase_buildCustomOrg_default(options, local.onErrorThrow);
            options = [];
            local.buildApp(options, onError);
        };
 
        local.testCase_buildCustomOrg_default = local.testCase_buildCustomOrg_default ||
            function (options, onError) {
            /*
             * this function will test buildCustomOrg's default handling-behavior
             */
                options = {};
                local.buildCustomOrg(options, onError);
            };
 
        local.testCase_buildLib_default = local.testCase_buildLib_default || function (
            options,
            onError
        ) {
        /*
         * this function will test buildLib's default handling-behavior
         */
            options = {};
            local.buildLib(options, onError);
        };
 
        local.testCase_buildReadme_default = local.testCase_buildReadme_default || function (
            options,
            onError
        ) {
        /*
         * this function will test buildReadme's default handling-behavior-behavior
         */
            options = {};
            local.buildReadme(options, onError);
        };
 
        local.testCase_buildTest_default = local.testCase_buildTest_default || function (
            options,
            onError
        ) {
        /*
         * this function will test buildTest's default handling-behavior
         */
            options = {};
            local.buildTest(options, onError);
        };
 
        local.testCase_webpage_default = local.testCase_webpage_default || function (
            options,
            onError
        ) {
        /*
         * this function will test webpage's default handling-behavior
         */
            options = { modeCoverageMerge: true, url: local.serverLocalHost + '?modeTest=1' };
            local.browserTest(options, onError);
        };
 
        // run test-server
        local.testRunServer(local);
        break;
    }
}());
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/

Statements: 16.12% (69 / 428)      Branches: 0% (0 / 169)      Functions: 0% (0 / 121)      Lines: 16.16% (69 / 427)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/
File Statements Branches Functions Lines
ambientlight.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
applicationcache.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
audio.js 7.14% (1 / 14) 0% (0 / 6) 0% (0 / 2) 7.14% (1 / 14)
battery.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
blob.js 20% (1 / 5) 100% (0 / 0) 0% (0 / 2) 20% (1 / 5)
canvas.js 25% (1 / 4) 0% (0 / 2) 0% (0 / 2) 25% (1 / 4)
canvastext.js 20% (1 / 5) 0% (0 / 2) 0% (0 / 2) 20% (1 / 5)
contenteditable.js 14.29% (1 / 7) 0% (0 / 2) 0% (0 / 2) 14.29% (1 / 7)
contextmenu.js 50% (1 / 2) 0% (0 / 2) 0% (0 / 1) 50% (1 / 2)
cookies.js 12.5% (1 / 8) 100% (0 / 0) 0% (0 / 2) 12.5% (1 / 8)
cors.js 50% (1 / 2) 0% (0 / 2) 0% (0 / 1) 50% (1 / 2)
crypto.js 33.33% (1 / 3) 100% (0 / 0) 0% (0 / 1) 33.33% (1 / 3)
custom-elements.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
custom-protocol-handler.js 12.5% (1 / 8) 0% (0 / 2) 0% (0 / 2) 12.5% (1 / 8)
customevent.js 50% (1 / 2) 0% (0 / 2) 0% (0 / 1) 50% (1 / 2)
dart.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
dataview-api.js 50% (1 / 2) 0% (0 / 2) 0% (0 / 1) 50% (1 / 2)
emoji.js 7.69% (1 / 13) 0% (0 / 4) 0% (0 / 2) 7.69% (1 / 13)
eventlistener.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
exif-orientation.js 12.5% (1 / 8) 100% (0 / 0) 0% (0 / 4) 12.5% (1 / 8)
flash.js 1.89% (1 / 53) 0% (0 / 33) 0% (0 / 7) 1.92% (1 / 52)
forcetouch.js 20% (1 / 5) 0% (0 / 4) 0% (0 / 2) 20% (1 / 5)
fullscreen-api.js 50% (1 / 2) 0% (0 / 2) 0% (0 / 1) 50% (1 / 2)
gamepad.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
geolocation.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
hashchange.js 20% (1 / 5) 0% (0 / 4) 0% (0 / 2) 20% (1 / 5)
hiddenscroll.js 25% (1 / 4) 100% (0 / 0) 0% (0 / 3) 25% (1 / 4)
history.js 16.67% (1 / 6) 0% (0 / 10) 0% (0 / 2) 16.67% (1 / 6)
htmlimports.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
ie8compat.js 50% (1 / 2) 0% (0 / 3) 0% (0 / 1) 50% (1 / 2)
indexeddb.js 8.7% (2 / 23) 0% (0 / 6) 0% (0 / 7) 8.7% (2 / 23)
indexeddbblob.js 3.33% (1 / 30) 0% (0 / 4) 0% (0 / 7) 3.33% (1 / 30)
input.js 11.11% (1 / 9) 0% (0 / 4) 0% (0 / 2) 11.11% (1 / 9)
inputsearchevent.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
inputtypes.js 3.85% (1 / 26) 0% (0 / 17) 0% (0 / 2) 3.85% (1 / 26)
intl.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
json.js 50% (1 / 2) 0% (0 / 3) 0% (0 / 1) 50% (1 / 2)
ligatures.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
lists-reversed.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
mathml.js 14.29% (1 / 7) 100% (0 / 0) 0% (0 / 3) 14.29% (1 / 7)
messagechannel.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
notification.js 9.09% (1 / 11) 0% (0 / 8) 0% (0 / 2) 9.09% (1 / 11)
pagevisibility-api.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
performance.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
pointerevents.js 12.5% (1 / 8) 0% (0 / 4) 0% (0 / 2) 12.5% (1 / 8)
pointerlock-api.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
postmessage.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
proximity.js 14.29% (2 / 14) 0% (0 / 4) 0% (0 / 4) 14.29% (2 / 14)
queryselector.js 50% (1 / 2) 0% (0 / 2) 0% (0 / 1) 50% (1 / 2)
quota-management-api.js 20% (1 / 5) 0% (0 / 2) 0% (0 / 2) 20% (1 / 5)
requestanimationframe.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
serviceworker.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
svg.js 50% (1 / 2) 0% (0 / 2) 0% (0 / 1) 50% (1 / 2)
templatestrings.js 14.29% (1 / 7) 100% (0 / 0) 0% (0 / 2) 14.29% (1 / 7)
touchevents.js 11.11% (1 / 9) 0% (0 / 5) 0% (0 / 3) 11.11% (1 / 9)
typed-arrays.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
unicode-range.js 9.09% (1 / 11) 0% (0 / 4) 0% (0 / 3) 9.09% (1 / 11)
unicode.js 8.33% (1 / 12) 0% (0 / 6) 0% (0 / 3) 8.33% (1 / 12)
userdata.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
vibration.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
video.js 7.14% (1 / 14) 0% (0 / 2) 0% (0 / 2) 7.14% (1 / 14)
vml.js 8.33% (1 / 12) 0% (0 / 6) 0% (0 / 2) 8.33% (1 / 12)
web-intents.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
webanimations.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
webgl.js 14.29% (1 / 7) 0% (0 / 6) 0% (0 / 2) 14.29% (1 / 7)
websockets.js 20% (1 / 5) 0% (0 / 2) 0% (0 / 1) 20% (1 / 5)
xdomainrequest.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/ambientlight.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/ambientlight.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18                          2        
/*!
{
  "name": "Ambient Light Events",
  "property": "ambientlight",
  "notes": [{
    "name": "W3C Ambient Light Events",
    "href": "https://www.w3.org/TR/ambient-light/"
  }]
}
!*/
/* DOC
Detects support for the API that provides information about the ambient light levels, as detected by the device's light detector, in terms of lux units.
*/
define(['Modernizr', 'hasEvent'], function(Modernizr, hasEvent) {
  Modernizr.addTest('ambientlight', hasEvent('devicelight', window));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/applicationcache.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/applicationcache.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23                                    2        
/*!
{
  "name": "Application Cache",
  "property": "applicationcache",
  "caniuse": "offline-apps",
  "tags": ["storage", "offline"],
  "notes": [{
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en/docs/HTML/Using_the_application_cache"
  }],
  "polyfills": ["html5gears"]
}
!*/
/* DOC
Detects support for the Application Cache, for storing data to enable web-based applications run offline.
 
The API has been [heavily criticized](http://alistapart.com/article/application-cache-is-a-douchebag) and discussions are underway to address this.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('applicationcache', 'applicationCache' in window);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/audio.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/audio.js

Statements: 7.14% (1 / 14)      Branches: 0% (0 / 6)      Functions: 0% (0 / 2)      Lines: 7.14% (1 / 14)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51                    2                                                                                
/*!
{
  "name" : "HTML5 Audio Element",
  "property": "audio",
  "tags" : ["html5", "audio", "media"]
}
!*/
/* DOC
Detects the audio element
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  // This tests evaluates support of the audio element, as well as
  // testing what types of content it supports.
  //
  // We're using the Boolean constructor here, so that we can extend the value
  // e.g.  Modernizr.audio     // true
  //       Modernizr.audio.ogg // 'probably'
  //
  // Codec values from : github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845
  //                     thx to NielsLeenheer and zcorpan
 
  // Note: in some older browsers, "no" was a return value instead of empty string.
  //   It was live in FF3.5.0 and 3.5.1, but fixed in 3.5.2
  //   It was also live in Safari 4.0.0 - 4.0.4, but fixed in 4.0.5
  Modernizr.addTest('audio', function() {
    var elem = createElement('audio');
    var bool = false;
 
    try {
      bool = !!elem.canPlayType
      if (bool) {
        bool      = new Boolean(bool);
        bool.ogg  = elem.canPlayType('audio/ogg; codecs="vorbis"') .replace(/^no$/, '');
        bool.mp3  = elem.canPlayType('audio/mpeg; codecs="mp3"')   .replace(/^no$/, '');
        bool.opus  = elem.canPlayType('audio/ogg; codecs="opus"')  ||
                     elem.canPlayType('audio/webm; codecs="opus"') .replace(/^no$/, '');
 
        // Mimetypes accepted:
        //   developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements
        //   bit.ly/iphoneoscodecs
        bool.wav  = elem.canPlayType('audio/wav; codecs="1"')     .replace(/^no$/, '');
        bool.m4a  = (elem.canPlayType('audio/x-m4a;')            ||
                     elem.canPlayType('audio/aac;'))             .replace(/^no$/, '');
      }
    } catch (e) { }
 
    return bool;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/battery.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/battery.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22                                  2        
/*!
{
  "name": "Battery API",
  "property": "batteryapi",
  "aliases": ["battery-api"],
  "builderAliases": ["battery_api"],
  "tags": ["device", "media"],
  "authors": ["Paul Sayre"],
  "notes": [{
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en/DOM/window.navigator.mozBattery"
  }]
}
!*/
/* DOC
Detect support for the Battery API, for accessing information about the system's battery charge level.
*/
define(['Modernizr', 'prefixed'], function(Modernizr, prefixed) {
  Modernizr.addTest('batteryapi', !!prefixed('battery', navigator), {aliases: ['battery-api']});
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/blob.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/blob.js

Statements: 20% (1 / 5)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 20% (1 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30                                  2                        
/*!
{
  "name": "Blob constructor",
  "property": "blobconstructor",
  "aliases": ["blob-constructor"],
  "builderAliases": ["blob_constructor"],
  "caniuse": "blobbuilder",
  "notes": [{
    "name": "W3C spec",
    "href": "https://w3c.github.io/FileAPI/#constructorBlob"
  }],
  "polyfills": ["blobjs"]
}
!*/
/* DOC
Detects support for the Blob constructor, for creating file-like objects of immutable, raw data.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('blobconstructor', function() {
    try {
      return !!new Blob();
    } catch (e) {
      return false;
    }
  }, {
    aliases: ['blob-constructor']
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/canvas.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/canvas.js

Statements: 25% (1 / 4)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 25% (1 / 4)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23                        2                    
/*!
{
  "name": "Canvas",
  "property": "canvas",
  "caniuse": "canvas",
  "tags": ["canvas", "graphics"],
  "polyfills": ["flashcanvas", "excanvas", "slcanvas", "fxcanvas"]
}
!*/
/* DOC
Detects support for the `<canvas>` element for 2D drawing.
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  // On the S60 and BB Storm, getContext exists, but always returns undefined
  // so we actually have to call getContext() to verify
  // github.com/Modernizr/Modernizr/issues/issue/97/
  Modernizr.addTest('canvas', function() {
    var elem = createElement('canvas');
    return !!(elem.getContext && elem.getContext('2d'));
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/canvastext.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/canvastext.js

Statements: 20% (1 / 5)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 20% (1 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22                        2                  
/*!
{
  "name": "Canvas text",
  "property": "canvastext",
  "caniuse": "canvas-text",
  "tags": ["canvas", "graphics"],
  "polyfills": ["canvastext"]
}
!*/
/* DOC
Detects support for the text APIs for `<canvas>` elements.
*/
define(['Modernizr', 'createElement', 'test/canvas'], function(Modernizr, createElement) {
  Modernizr.addTest('canvastext',  function() {
    if (Modernizr.canvas  === false) {
      return false;
    }
    return typeof createElement('canvas').getContext('2d').fillText == 'function';
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/contenteditable.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/contenteditable.js

Statements: 14.29% (1 / 7)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 14.29% (1 / 7)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32                            2                                  
/*!
{
  "name": "Content Editable",
  "property": "contenteditable",
  "caniuse": "contenteditable",
  "notes": [{
    "name": "WHATWG spec",
    "href": "https://html.spec.whatwg.org/multipage/interaction.html#contenteditable"
  }]
}
!*/
/* DOC
Detects support for the `contenteditable` attribute of elements, allowing their DOM text contents to be edited directly by the user.
*/
define(['Modernizr', 'createElement', 'docElement'], function(Modernizr, createElement, docElement) {
  Modernizr.addTest('contenteditable', function() {
    // early bail out
    if (!('contentEditable' in docElement)) {
      return;
    }
 
    // some mobile browsers (android < 3.0, iOS < 5) claim to support
    // contentEditable, but but don't really. This test checks to see
    // confirms whether or not it actually supports it.
 
    var div = createElement('div');
    div.contentEditable = true;
    return div.contentEditable === 'true';
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/contextmenu.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/contextmenu.js

Statements: 50% (1 / 2)      Branches: 0% (0 / 2)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26                                    2              
/*!
{
  "name": "Context menus",
  "property": "contextmenu",
  "caniuse": "menu",
  "notes": [{
    "name": "W3C spec",
    "href": "http://www.w3.org/TR/html5/interactive-elements.html#context-menus"
  },{
    "name": "thewebrocks.com Demo",
    "href": "http://thewebrocks.com/demos/context-menu/"
  }],
  "polyfills": ["jquery-contextmenu"]
}
!*/
/* DOC
Detects support for custom context menus.
*/
define(['Modernizr', 'docElement'], function(Modernizr, docElement) {
  Modernizr.addTest(
    'contextmenu',
    ('contextMenu' in docElement && 'HTMLMenuItemElement' in window)
  );
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/cookies.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/cookies.js

Statements: 12.5% (1 / 8)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 12.5% (1 / 8)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39                      2                                                      
/*!
{
  "name": "Cookies",
  "property": "cookies",
  "tags": ["storage"],
  "authors": ["tauren"]
}
!*/
/* DOC
Detects whether cookie support is enabled.
*/
define(['Modernizr'], function(Modernizr) {
  // https://github.com/Modernizr/Modernizr/issues/191
 
  Modernizr.addTest('cookies', function() {
    // navigator.cookieEnabled cannot detect custom or nuanced cookie blocking
    // configurations. For example, when blocking cookies via the Advanced
    // Privacy Settings in IE9, it always returns true. And there have been
    // issues in the past with site-specific exceptions.
    // Don't rely on it.
 
    // try..catch because some in situations `document.cookie` is exposed but throws a
    // SecurityError if you try to access it; e.g. documents created from data URIs
    // or in sandboxed iframes (depending on flags/context)
    try {
      // Create cookie
      document.cookie = 'cookietest=1';
      var ret = document.cookie.indexOf('cookietest=') != -1;
      // Delete cookie
      document.cookie = 'cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT';
      return ret;
    }
    catch (e) {
      return false;
    }
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/cors.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/cors.js

Statements: 50% (1 / 2)      Branches: 0% (0 / 2)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21                                2        
/*!
{
  "name": "Cross-Origin Resource Sharing",
  "property": "cors",
  "caniuse": "cors",
  "authors": ["Theodoor van Donge"],
  "notes": [{
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS"
  }],
  "polyfills": ["pmxdr", "ppx", "flxhr"]
}
!*/
/* DOC
Detects support for Cross-Origin Resource Sharing: method of performing XMLHttpRequests across domains.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('cors', 'XMLHttpRequest' in window && 'withCredentials' in new XMLHttpRequest());
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/crypto.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/crypto.js

Statements: 33.33% (1 / 3)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25                                      2          
/*!
{
  "name": "Web Cryptography",
  "property": "cryptography",
  "caniuse": "cryptography",
  "tags": ["crypto"],
  "authors": ["roblarsen"],
  "notes": [{
    "name": "W3C Editor's Draft",
    "href": "https://www.w3.org/TR/WebCryptoAPI/"
  }],
  "polyfills": [
    "polycrypt"
  ]
}
!*/
/* DOC
Detects support for the cryptographic functionality available under window.crypto.subtle
*/
define(['Modernizr', 'prefixed'], function(Modernizr, prefixed) {
  var crypto = prefixed('crypto', window);
  Modernizr.addTest('crypto', !!prefixed('subtle', crypto));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/custom-elements.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/custom-elements.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20                              2        
/*!
{
  "name": "Custom Elements API",
  "property": "customelements",
  "tags": ["customelements"],
  "polyfills": ["customelements"],
  "notes": [{
    "name": "Specs for Custom Elements",
    "href": "https://www.w3.org/TR/custom-elements/"
  }]
}
!*/
/* DOC
Detects support for the Custom Elements API, to create custom html elements via js
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('customelements', 'customElements' in window);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/custom-protocol-handler.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/custom-protocol-handler.js

Statements: 12.5% (1 / 8)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 12.5% (1 / 8)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42                                        2                                          
/*!
{
  "name": "Custom protocol handler",
  "property": "customprotocolhandler",
  "authors": ["Ben Schwarz"],
  "builderAliases": ["custom_protocol_handler"],
  "notes": [{
    "name": "WHATWG overview",
    "href": "https://developers.whatwg.org/timers.html#custom-handlers"
  },{
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en-US/docs/Web/API/navigator.registerProtocolHandler"
  }],
  "warnings": [],
  "polyfills": []
}
!*/
/* DOC
Detects support for the `window.registerProtocolHandler()` API to allow websites to register themselves as possible handlers for particular protocols.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('customprotocolhandler', function() {
    // early bailout where it doesn't exist at all
    if (!navigator.registerProtocolHandler) {
      return false;
    }
 
    // registerProtocolHandler was stubbed in webkit for a while, and didn't
    // actually do anything. We intentionally set it improperly to test for
    // the proper sort of failure
    try {
      navigator.registerProtocolHandler('thisShouldFail');
    }
    catch (e) {
      return e instanceof TypeError;
    }
 
    return false;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/customevent.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/customevent.js

Statements: 50% (1 / 2)      Branches: 0% (0 / 2)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26                                          2        
/*!
{
  "name": "CustomEvent",
  "property": "customevent",
  "tags": ["customevent"],
  "authors": ["Alberto Elias"],
  "notes": [{
    "name": "W3C DOM reference",
    "href": "https://www.w3.org/TR/DOM-Level-3-Events/#interface-CustomEvent"
  }, {
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en/docs/Web/API/CustomEvent"
  }],
  "polyfills": ["eventlistener"]
}
!*/
/* DOC
 
Detects support for CustomEvent.
 
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('customevent', 'CustomEvent' in window && typeof window.CustomEvent === 'function');
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/dart.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/dart.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19                            2        
/*!
{
  "name": "Dart",
  "property": "dart",
  "authors": ["Theodoor van Donge"],
  "notes": [{
    "name": "Language website",
    "href": "https://www.dartlang.org/"
  }]
}
!*/
/* DOC
Detects native support for the Dart programming language.
*/
define(['Modernizr', 'prefixed'], function(Modernizr, prefixed) {
  Modernizr.addTest('dart', !!prefixed('startDart', navigator));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/dataview-api.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/dataview-api.js

Statements: 50% (1 / 2)      Branches: 0% (0 / 2)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21                                2        
/*!
{
  "name": "DataView",
  "property": "dataview",
  "authors": ["Addy Osmani"],
  "builderAliases": ["dataview_api"],
  "notes": [{
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en/JavaScript_typed_arrays/DataView"
  }],
  "polyfills": ["jdataview"]
}
!*/
/* DOC
Detects support for the DataView interface for reading data from an ArrayBuffer as part of the Typed Array spec.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('dataview', (typeof DataView !== 'undefined' && 'getFloat64' in DataView.prototype));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/emoji.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/emoji.js

Statements: 7.69% (1 / 13)      Branches: 0% (0 / 4)      Functions: 0% (0 / 2)      Lines: 7.69% (1 / 13)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27                  2                                  
/*!
{
  "name": "Emoji",
  "property": "emoji"
}
!*/
/* DOC
Detects support for emoji character sets.
*/
define(['Modernizr', 'createElement', 'test/canvastext'], function(Modernizr, createElement) {
  Modernizr.addTest('emoji', function() {
    if (!Modernizr.canvastext) {
      return false;
    }
    var pixelRatio = window.devicePixelRatio || 1;
    var offset = 12 * pixelRatio;
    var node = createElement('canvas');
    var ctx = node.getContext('2d');
    ctx.fillStyle = '#f00';
    ctx.textBaseline = 'top';
    ctx.font = '32px Arial';
    ctx.fillText('\ud83d\udc28', 0, 0); // U+1F428 KOALA
    return ctx.getImageData(offset, offset, 1, 1).data[0] !== 0;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/eventlistener.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/eventlistener.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20                              2        
/*!
{
  "name": "Event Listener",
  "property": "eventlistener",
  "authors": ["Andrew Betts (@triblondon)"],
  "notes": [{
    "name": "W3C Spec",
    "href": "https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-Registration-interfaces"
  }],
  "polyfills": ["eventlistener"]
}
!*/
/* DOC
Detects native support for addEventListener
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('eventlistener', 'addEventListener' in window);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/exif-orientation.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/exif-orientation.js

Statements: 12.5% (1 / 8)      Branches: 100% (0 / 0)      Functions: 0% (0 / 4)      Lines: 12.5% (1 / 8)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44                                            2                                          
/*!
{
  "name": "EXIF Orientation",
  "property": "exiforientation",
  "tags": ["image"],
  "builderAliases": ["exif_orientation"],
  "async": true,
  "authors": ["Paul Sayre"],
  "notes": [{
    "name": "Article by Dave Perrett",
    "href": "http://recursive-design.com/blog/2012/07/28/exif-orientation-handling-is-a-ghetto/"
  },{
    "name": "Article by Calvin Hass",
    "href": "http://www.impulseadventure.com/photo/exif-orientation.html"
  }]
}
!*/
/* DOC
Detects support for EXIF Orientation in JPEG images.
 
iOS looks at the EXIF Orientation flag in JPEGs and rotates the image accordingly. Most desktop browsers just ignore this data.
*/
define(['Modernizr', 'addTest'], function(Modernizr, addTest) {
  // Bug trackers:
  //    bugzil.la/298619 (unimplemented)
  //    crbug.com/56845 (looks incomplete)
  //    webk.it/19688 (available upstream but its up all ports to turn on individually)
  Modernizr.addAsyncTest(function() {
    var img = new Image();
 
    img.onerror = function() {
      addTest('exiforientation', false, {aliases: ['exif-orientation']});
    };
 
    img.onload = function() {
      addTest('exiforientation', img.width !== 2, {aliases: ['exif-orientation']});
    };
 
    // There may be a way to shrink this more, it's a 1x2 white jpg with the orientation flag set to 6
    img.src = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QAiRXhpZgAASUkqAAgAAAABABIBAwABAAAABgASAAAAAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAABAAIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigD/2Q==';
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/flash.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/flash.js

Statements: 1.89% (1 / 53)      Branches: 0% (0 / 33)      Functions: 0% (0 / 7)      Lines: 1.92% (1 / 52)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121                      2                                                                                                                                                                                                                          
/*!
  {
  "name": "Flash",
  "property": "flash",
  "tags": ["flash"],
  "polyfills": ["shumway"]
  }
  !*/
/* DOC
Detects Flash support as well as Flash-blocking plugins
*/
define(['Modernizr', 'createElement', 'docElement', 'addTest', 'getBody', 'isSVG'], function(Modernizr, createElement, docElement, addTest, getBody, isSVG) {
  Modernizr.addAsyncTest(function() {
 
    var attachBody = function(body) {
      if (!docElement.contains(body)) {
        docElement.appendChild(body);
      }
    };
    var removeFakeBody = function(body) {
      // If we’re rockin’ an attached fake body, clean it up
      if (body.fake && body.parentNode) {
        body.parentNode.removeChild(body);
      }
    };
    var runTest = function(result, embed) {
      var bool = !!result;
      if (bool) {
        bool = new Boolean(bool);
        bool.blocked = (result === 'blocked');
      }
      addTest('flash', function() { return bool; });
 
      if (embed && body.contains(embed)) {
 
        // in case embed has been wrapped, as with ClickToPlugin
        while (embed.parentNode !== body) {
          embed = embed.parentNode;
        }
 
        body.removeChild(embed);
      }
 
    };
    var easy_detect;
    var activex;
    // we wrap activex in a try/catch because when Flash is disabled through
    // ActiveX controls, it throws an error.
    try {
      // Pan is an API that exists for Flash objects.
      activex = 'ActiveXObject' in window && 'Pan' in new window.ActiveXObject('ShockwaveFlash.ShockwaveFlash');
    } catch (e) {}
 
    easy_detect = !(('plugins' in navigator && 'Shockwave Flash' in navigator.plugins) || activex);
 
    if (easy_detect || isSVG) {
      runTest(false);
    }
    else {
      // Flash seems to be installed, but it might be blocked. We have to
      // actually create an element to see what happens to it.
      var embed = createElement('embed');
      var body = getBody();
      var blockedDetect;
      var inline_style;
 
      embed.type = 'application/x-shockwave-flash';
 
      // Need to do this in the body (fake or otherwise) otherwise IE8 complains
      body.appendChild(embed);
 
      // Pan doesn't exist in the embed if its IE (its on the ActiveXObjeect)
      // so this check is for all other browsers.
      if (!('Pan' in embed) && !activex) {
        attachBody(body);
        runTest('blocked', embed);
        removeFakeBody(body);
        return;
      }
 
      blockedDetect = function() {
        // if we used a fake body originally, we need to restart this test, since
        // we haven't been attached to the DOM, and therefore none of the blockers
        // have had time to work.
        attachBody(body);
        if (!docElement.contains(body)) {
          body = document.body || body;
          embed = createElement('embed');
          embed.type = 'application/x-shockwave-flash';
          body.appendChild(embed);
          return setTimeout(blockedDetect, 1000);
        }
        if (!docElement.contains(embed)) {
          runTest('blocked');
        }
        else {
          inline_style = embed.style.cssText;
          if (inline_style !== '') {
            // the style of the element has changed automatically. This is a
            // really poor heuristic, but for lower end Flash blocks, it the
            // only change they can make.
            runTest('blocked', embed);
          }
          else {
            runTest(true, embed);
          }
        }
        removeFakeBody(body);
      };
 
      // If we have got this far, there is still a chance a userland plugin
      // is blocking us (either changing the styles, or automatically removing
      // the element). Both of these require us to take a step back for a moment
      // to allow for them to get time of the thread, hence a setTimeout.
      //
      setTimeout(blockedDetect, 10);
    }
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/forcetouch.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/forcetouch.js

Statements: 20% (1 / 5)      Branches: 0% (0 / 4)      Functions: 0% (0 / 2)      Lines: 20% (1 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31                                  2                          
/*!
{
  "name": "Force Touch Events",
  "property": "forcetouch",
  "authors": ["Kraig Walker"],
  "notes": [{
    "name": "Responding to Force Touch Events from JavaScript",
    "href": "https://developer.apple.com/library/prerelease/mac/documentation/AppleApplications/Conceptual/SafariJSProgTopics/Articles/RespondingtoForceTouchEventsfromJavaScript.html"
  }]
}
!*/
/* DOC
Tests whether the browser supports the detection of Force Touch Events.
Force Touch Events allow custom behaviours and interactions to take place based on the given pressure or change in pressure from a compatible trackpad.
 
Force Touch events are available in OS X 10.11 and later on devices equipped with Force Touch trackpads.
*/
define(['Modernizr', 'hasEvent', 'prefixed'], function(Modernizr, hasEvent, prefixed) {
  Modernizr.addTest('forcetouch', function() {
		// github.com/Modernizr/Modernizr/issues/1613
    // Test if the browser supports the force touch event progression (see notes link)
    if (!hasEvent(prefixed('mouseforcewillbegin', window, false), window)) {
      return false;
    }
 
    // Test if the browser provides thresholds defining a "force touch" from a normal touch/click event
    return MouseEvent.WEBKIT_FORCE_AT_MOUSE_DOWN && MouseEvent.WEBKIT_FORCE_AT_FORCE_MOUSE_DOWN;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/fullscreen-api.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/fullscreen-api.js

Statements: 50% (1 / 2)      Branches: 0% (0 / 2)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22                                2          
/*!
{
  "name": "Fullscreen API",
  "property": "fullscreen",
  "caniuse": "fullscreen",
  "notes": [{
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en/API/Fullscreen"
  }],
  "polyfills": ["screenfulljs"],
  "builderAliases": ["fullscreen_api"]
}
!*/
/* DOC
Detects support for the ability to make the current website take over the user's entire screen
*/
define(['Modernizr', 'prefixed'], function(Modernizr, prefixed) {
  // github.com/Modernizr/Modernizr/issues/739
  Modernizr.addTest('fullscreen', !!(prefixed('exitFullscreen', document, false) || prefixed('cancelFullScreen', document, false)));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/gamepad.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/gamepad.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26                                        2          
/*!
{
  "name": "GamePad API",
  "property": "gamepads",
  "authors": ["Eric Bidelman"],
  "tags": ["media"],
  "notes": [{
    "name": "W3C spec",
    "href": "https://www.w3.org/TR/gamepad/"
  },{
    "name": "HTML5 Rocks tutorial",
    "href": "http://www.html5rocks.com/en/tutorials/doodles/gamepad/#toc-featuredetect"
  }],
  "warnings": [],
  "polyfills": []
}
!*/
/* DOC
Detects support for the Gamepad API, for access to gamepads and controllers.
*/
define(['Modernizr', 'prefixed'], function(Modernizr, prefixed) {
 
  Modernizr.addTest('gamepads', !!prefixed('getGamepads', navigator));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/geolocation.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/geolocation.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36                                          2                            
/*!
{
  "name": "Geolocation API",
  "property": "geolocation",
  "caniuse": "geolocation",
  "tags": ["media"],
  "notes": [{
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en-US/docs/WebAPI/Using_geolocation"
  }],
  "polyfills": [
    "joshuabell-polyfill",
    "webshims",
    "geo-location-javascript",
    "geolocation-api-polyfill"
  ]
}
!*/
/* DOC
Detects support for the Geolocation API for users to provide their location to web applications.
*/
define(['Modernizr'], function(Modernizr) {
  // geolocation is often considered a trivial feature detect...
  // Turns out, it's quite tricky to get right:
  //
  // Using !!navigator.geolocation does two things we don't want. It:
  //   1. Leaks memory in IE9: github.com/Modernizr/Modernizr/issues/513
  //   2. Disables page caching in WebKit: webk.it/43956
  //
  // Meanwhile, in Firefox < 8, an about:config setting could expose
  // a false positive that would throw an exception: bugzil.la/688158
 
  Modernizr.addTest('geolocation', 'geolocation' in navigator);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/hashchange.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/hashchange.js

Statements: 20% (1 / 5)      Branches: 0% (0 / 4)      Functions: 0% (0 / 2)      Lines: 20% (1 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35                                            2                        
/*!
{
  "name": "Hashchange event",
  "property": "hashchange",
  "caniuse": "hashchange",
  "tags": ["history"],
  "notes": [{
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en-US/docs/Web/API/window.onhashchange"
  }],
  "polyfills": [
    "jquery-hashchange",
    "moo-historymanager",
    "jquery-ajaxy",
    "hasher",
    "shistory"
  ]
}
!*/
/* DOC
Detects support for the `hashchange` event, fired when the current location fragment changes.
*/
define(['Modernizr', 'hasEvent'], function(Modernizr, hasEvent) {
  Modernizr.addTest('hashchange', function() {
    if (hasEvent('hashchange', window) === false) {
      return false;
    }
 
    // documentMode logic from YUI to filter out IE8 Compat Mode
    //   which false positives.
    return (document.documentMode === undefined || document.documentMode > 7);
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/hiddenscroll.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/hiddenscroll.js

Statements: 25% (1 / 4)      Branches: 100% (0 / 0)      Functions: 0% (0 / 3)      Lines: 25% (1 / 4)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27                                    2                
/*!
{
  "name": "Hidden Scrollbar",
  "property": "hiddenscroll",
  "authors": ["Oleg Korsunsky"],
  "tags": ["overlay"],
  "notes": [{
    "name": "Overlay Scrollbar description",
    "href": "https://developer.apple.com/library/mac/releasenotes/MacOSX/WhatsNewInOSX/Articles/MacOSX10_7.html#//apple_ref/doc/uid/TP40010355-SW39"
  },{
    "name": "Video example of overlay scrollbars",
    "href": "https://gfycat.com/FoolishMeaslyAtlanticsharpnosepuffer"
  }]
}
!*/
/* DOC
Detects overlay scrollbars (when scrollbars on overflowed blocks are visible). This is found most commonly on mobile and OS X.
*/
define(['Modernizr', 'testStyles'], function(Modernizr, testStyles) {
  Modernizr.addTest('hiddenscroll', function() {
    return testStyles('#modernizr {width:100px;height:100px;overflow:scroll}', function(elem) {
      return elem.offsetWidth === elem.clientWidth;
    });
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/history.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/history.js

Statements: 16.67% (1 / 6)      Branches: 0% (0 / 10)      Functions: 0% (0 / 2)      Lines: 16.67% (1 / 6)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48                                        2                                                      
/*!
{
  "name": "History API",
  "property": "history",
  "caniuse": "history",
  "tags": ["history"],
  "authors": ["Hay Kranen", "Alexander Farkas"],
  "notes": [{
    "name": "W3C Spec",
    "href": "https://www.w3.org/TR/html51/browsers.html#the-history-interface"
  }, {
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en-US/docs/Web/API/window.history"
  }],
  "polyfills": ["historyjs", "html5historyapi"]
}
!*/
/* DOC
Detects support for the History API for manipulating the browser session history.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('history', function() {
    // Issue #733
    // The stock browser on Android 2.2 & 2.3, and 4.0.x returns positive on history support
    // Unfortunately support is really buggy and there is no clean way to detect
    // these bugs, so we fall back to a user agent sniff :(
    var ua = navigator.userAgent;
 
    // We only want Android 2 and 4.0, stock browser, and not Chrome which identifies
    // itself as 'Mobile Safari' as well, nor Windows Phone (issue #1471).
    if ((ua.indexOf('Android 2.') !== -1 ||
        (ua.indexOf('Android 4.0') !== -1)) &&
        ua.indexOf('Mobile Safari') !== -1 &&
        ua.indexOf('Chrome') === -1 &&
        ua.indexOf('Windows Phone') === -1 &&
    // Since all documents on file:// share an origin, the History apis are
    // blocked there as well
        location.protocol !== 'file:'
    ) {
      return false;
    }
 
    // Return the regular check
    return (window.history && 'pushState' in window.history);
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/htmlimports.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/htmlimports.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27                                            2        
/*!
{
  "name": "HTML Imports",
  "notes": [
    {
      "name": "W3C HTML Imports Specification",
      "href": "https://w3c.github.io/webcomponents/spec/imports/"
    },
    {
      "name": "HTML Imports - #include for the web",
      "href": "http://www.html5rocks.com/en/tutorials/webcomponents/imports/"
    }
  ],
  "polyfills": ["polymer-htmlimports"],
  "property": "htmlimports",
  "tags": ["html", "import"]
}
!*/
/* DOC
Detects support for HTML import, a feature that is used for loading in Web Components.
 */
 
define(['addTest', 'createElement'], function(addTest, createElement) {
  addTest('htmlimports', 'import' in createElement('link'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/ie8compat.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/ie8compat.js

Statements: 50% (1 / 2)      Branches: 0% (0 / 3)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20                    2                  
/*!
{
  "name": "IE8 compat mode",
  "property": "ie8compat",
  "authors": ["Erich Ocean"]
}
!*/
/* DOC
Detects whether or not the current browser is IE8 in compatibility mode (i.e. acting as IE7).
*/
define(['Modernizr'], function(Modernizr) {
  // In this case, IE8 will be acting as IE7. You may choose to remove features in this case.
 
  // related:
  // james.padolsey.com/javascript/detect-ie-in-js-using-conditional-comments/
 
  Modernizr.addTest('ie8compat', (!window.addEventListener && !!document.documentMode && document.documentMode === 7));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/indexeddb.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/indexeddb.js

Statements: 8.7% (2 / 23)      Branches: 0% (0 / 6)      Functions: 0% (0 / 7)      Lines: 8.7% (2 / 23)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64                          2                                                                           1                        
/*!
{
  "name": "IndexedDB",
  "property": "indexeddb",
  "caniuse": "indexeddb",
  "tags": ["storage"],
  "polyfills": ["indexeddb"],
  "async": true
}
!*/
/* DOC
Detects support for the IndexedDB client-side storage API (final spec).
*/
define(['Modernizr', 'prefixed', 'addTest'], function(Modernizr, prefixed, addTest) {
  // Vendors had inconsistent prefixing with the experimental Indexed DB:
  // - Webkit's implementation is accessible through webkitIndexedDB
  // - Firefox shipped moz_indexedDB before FF4b9, but since then has been mozIndexedDB
  // For speed, we don't test the legacy (and beta-only) indexedDB
 
  Modernizr.addAsyncTest(function() {
 
    var indexeddb;
 
    try {
      // Firefox throws a Security Error when cookies are disabled
      indexeddb = prefixed('indexedDB', window);
    } catch (e) {
    }
 
    if (!!indexeddb) {
      var testDBName = 'modernizr-' + Math.random();
      var req = indexeddb.open(testDBName);
 
      req.onerror = function() {
        if (req.error && req.error.name === 'InvalidStateError') {
          addTest('indexeddb', false);
        } else {
          addTest('indexeddb', true);
          detectDeleteDatabase(indexeddb, testDBName);
        }
      };
 
      req.onsuccess = function() {
        addTest('indexeddb', true);
        detectDeleteDatabase(indexeddb, testDBName);
      };
    } else {
      addTest('indexeddb', false);
    }
  });
 
  function detectDeleteDatabase(indexeddb, testDBName) {
    var deleteReq = indexeddb.deleteDatabase(testDBName);
    deleteReq.onsuccess = function() {
      addTest('indexeddb.deletedatabase', true);
    };
    deleteReq.onerror = function() {
      addTest('indexeddb.deletedatabase', false);
    };
  }
 
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/indexeddbblob.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/indexeddbblob.js

Statements: 3.33% (1 / 30)      Branches: 0% (0 / 4)      Functions: 0% (0 / 7)      Lines: 3.33% (1 / 30)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69                  2                                                                                                                      
/*!
{
  "name": "IndexedDB Blob",
  "property": "indexeddbblob"
}
!*/
/* DOC
Detects if the browser can save File/Blob objects to IndexedDB
*/
define(['Modernizr', 'addTest', 'prefixed', 'test/indexeddb'], function(Modernizr, addTest, prefixed) {
  // Vendors had inconsistent prefixing with the experimental Indexed DB:
  // - Webkit's implementation is accessible through webkitIndexedDB
  // - Firefox shipped moz_indexedDB before FF4b9, but since then has been mozIndexedDB
  // For speed, we don't test the legacy (and beta-only) indexedDB
 
  Modernizr.addAsyncTest(function() {
    var indexeddb;
    var dbname = 'detect-blob-support';
    var supportsBlob = false;
    var openRequest;
    var db;
    var putRequest;
 
    try {
      indexeddb = prefixed('indexedDB', window);
    } catch (e) {
    }
 
    if (!(Modernizr.indexeddb && Modernizr.indexeddb.deletedatabase)) {
      return false;
    }
 
    // Calling `deleteDatabase` in a try…catch because some contexts (e.g. data URIs)
    // will throw a `SecurityError`
    try {
      indexeddb.deleteDatabase(dbname).onsuccess = function() {
        openRequest = indexeddb.open(dbname, 1);
        openRequest.onupgradeneeded = function() {
          openRequest.result.createObjectStore('store');
        };
        openRequest.onsuccess = function() {
          db = openRequest.result;
          try {
            putRequest = db.transaction('store', 'readwrite').objectStore('store').put(new Blob(), 'key');
            putRequest.onsuccess = function() {
              supportsBlob = true;
            };
            putRequest.onerror = function() {
              supportsBlob = false;
            };
          }
          catch (e) {
            supportsBlob = false;
          }
          finally {
            addTest('indexeddbblob', supportsBlob);
            db.close();
            indexeddb.deleteDatabase(dbname);
          }
        };
      };
    }
    catch (e) {
      addTest('indexeddbblob', false);
    }
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/input.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/input.js

Statements: 11.11% (1 / 9)      Branches: 0% (0 / 4)      Functions: 0% (0 / 2)      Lines: 11.11% (1 / 9)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56                                                          2                                                    
/*!
{
  "name": "Input attributes",
  "property": "input",
  "tags": ["forms"],
  "authors": ["Mike Taylor"],
  "notes": [{
    "name": "WHATWG spec",
    "href": "https://html.spec.whatwg.org/multipage/forms.html#input-type-attr-summary"
  }],
  "knownBugs": ["Some blackberry devices report false positive for input.multiple"]
}
!*/
/* DOC
Detects support for HTML5 `<input>` element attributes and exposes Boolean subproperties with the results:
 
```javascript
Modernizr.input.autocomplete
Modernizr.input.autofocus
Modernizr.input.list
Modernizr.input.max
Modernizr.input.min
Modernizr.input.multiple
Modernizr.input.pattern
Modernizr.input.placeholder
Modernizr.input.required
Modernizr.input.step
```
*/
define(['Modernizr', 'createElement', 'inputElem'], function(Modernizr, createElement, inputElem) {
  // Run through HTML5's new input attributes to see if the UA understands any.
  // Mike Taylr has created a comprehensive resource for testing these attributes
  //   when applied to all input types:
  //   miketaylr.com/code/input-type-attr.html
 
  // Only input placeholder is tested while textarea's placeholder is not.
  // Currently Safari 4 and Opera 11 have support only for the input placeholder
  // Both tests are available in feature-detects/forms-placeholder.js
 
  var inputattrs = 'autocomplete autofocus list placeholder max min multiple pattern required step'.split(' ');
  var attrs = {};
 
  Modernizr.input = (function(props) {
    for (var i = 0, len = props.length; i < len; i++) {
      attrs[ props[i] ] = !!(props[i] in inputElem);
    }
    if (attrs.list) {
      // safari false positive's on datalist: webk.it/74252
      // see also github.com/Modernizr/Modernizr/issues/146
      attrs.list = !!(createElement('datalist') && window.HTMLDataListElement);
    }
    return attrs;
  })(inputattrs);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/inputsearchevent.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/inputsearchevent.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23                                    2        
/*!
{
  "name": "input[search] search event",
  "property": "search",
  "tags": ["input","search"],
  "authors": ["Calvin Webster"],
  "notes": [{
    "name": "Wufoo demo",
    "href": "https://www.wufoo.com/html5/types/5-search.html?"
  }, {
    "name": "CSS Tricks",
    "href": "https://css-tricks.com/webkit-html5-search-inputs/"
  }]
}
!*/
/* DOC
There is a custom `search` event implemented in webkit browsers when using an `input[search]` element.
*/
define(['Modernizr', 'hasEvent'], function(Modernizr, hasEvent) {
  Modernizr.addTest('inputsearchevent',  hasEvent('search'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/inputtypes.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/inputtypes.js

Statements: 3.85% (1 / 26)      Branches: 0% (0 / 17)      Functions: 0% (0 / 2)      Lines: 3.85% (1 / 26)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110                                                                                    2                                                                                                                                      
/*!
{
  "name": "Form input types",
  "property": "inputtypes",
  "caniuse": "forms",
  "tags": ["forms"],
  "authors": ["Mike Taylor"],
  "polyfills": [
    "jquerytools",
    "webshims",
    "h5f",
    "webforms2",
    "nwxforms",
    "fdslider",
    "html5slider",
    "galleryhtml5forms",
    "jscolor",
    "html5formshim",
    "selectedoptionsjs",
    "formvalidationjs"
  ]
}
!*/
/* DOC
Detects support for HTML5 form input types and exposes Boolean subproperties with the results:
 
```javascript
Modernizr.inputtypes.color
Modernizr.inputtypes.date
Modernizr.inputtypes.datetime
Modernizr.inputtypes['datetime-local']
Modernizr.inputtypes.email
Modernizr.inputtypes.month
Modernizr.inputtypes.number
Modernizr.inputtypes.range
Modernizr.inputtypes.search
Modernizr.inputtypes.tel
Modernizr.inputtypes.time
Modernizr.inputtypes.url
Modernizr.inputtypes.week
```
*/
define(['Modernizr', 'inputElem', 'docElement'], function(Modernizr, inputElem, docElement) {
  // Run through HTML5's new input types to see if the UA understands any.
  //   This is put behind the tests runloop because it doesn't return a
  //   true/false like all the other tests; instead, it returns an object
  //   containing each input type with its corresponding true/false value
 
  // Big thanks to @miketaylr for the html5 forms expertise. miketaylr.com/
  var inputtypes = 'search tel url email datetime date month week time datetime-local number range color'.split(' ');
  var inputs = {};
 
  Modernizr.inputtypes = (function(props) {
    var len = props.length;
    var smile = '1)';
    var inputElemType;
    var defaultView;
    var bool;
 
    for (var i = 0; i < len; i++) {
 
      inputElem.setAttribute('type', inputElemType = props[i]);
      bool = inputElem.type !== 'text' && 'style' in inputElem;
 
      // We first check to see if the type we give it sticks..
      // If the type does, we feed it a textual value, which shouldn't be valid.
      // If the value doesn't stick, we know there's input sanitization which infers a custom UI
      if (bool) {
 
        inputElem.value         = smile;
        inputElem.style.cssText = 'position:absolute;visibility:hidden;';
 
        if (/^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined) {
 
          docElement.appendChild(inputElem);
          defaultView = document.defaultView;
 
          // Safari 2-4 allows the smiley as a value, despite making a slider
          bool =  defaultView.getComputedStyle &&
            defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' &&
            // Mobile android web browser has false positive, so must
            // check the height to see if the widget is actually there.
            (inputElem.offsetHeight !== 0);
 
          docElement.removeChild(inputElem);
 
        } else if (/^(search|tel)$/.test(inputElemType)) {
          // Spec doesn't define any special parsing or detectable UI
          //   behaviors so we pass these through as true
 
          // Interestingly, opera fails the earlier test, so it doesn't
          //  even make it here.
 
        } else if (/^(url|email)$/.test(inputElemType)) {
          // Real url and email support comes with prebaked validation.
          bool = inputElem.checkValidity && inputElem.checkValidity() === false;
 
        } else {
          // If the upgraded input compontent rejects the :) text, we got a winner
          bool = inputElem.value != smile;
        }
      }
 
      inputs[ props[i] ] = !!bool;
    }
    return inputs;
  })(inputtypes);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/intl.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/intl.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22                                  2        
/*!
 {
 "name": "Internationalization API",
 "property": "intl",
 "notes": [{
 "name": "MDN documentation",
 "href": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl"
 },{
 "name": "ECMAScript spec",
 "href": "http://www.ecma-international.org/ecma-402/1.0/"
 }]
 }
 !*/
/* DOC
Detects support for the Internationalization API which allow easy formatting of number and dates and sorting string
based on a locale
*/
define(['Modernizr', 'prefixed'], function(Modernizr, prefixed) {
  Modernizr.addTest('intl', !!prefixed('Intl', window));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/json.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/json.js

Statements: 50% (1 / 2)      Branches: 0% (0 / 3)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23                              2              
/*!
{
  "name": "JSON",
  "property": "json",
  "caniuse": "json",
  "notes": [{
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en-US/docs/Glossary/JSON"
  }],
  "polyfills": ["json2"]
}
!*/
/* DOC
Detects native support for JSON handling functions.
*/
define(['Modernizr'], function(Modernizr) {
  // this will also succeed if you've loaded the JSON2.js polyfill ahead of time
  //   ... but that should be obvious. :)
 
  Modernizr.addTest('json', 'JSON' in window && 'parse' in JSON && 'stringify' in JSON);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/ligatures.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/ligatures.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19                            2        
/*!
{
  "name": "Font Ligatures",
  "property": "ligatures",
  "caniuse": "font-feature",
  "notes": [{
    "name": "Cross-browser Web Fonts",
    "href": "http://www.sitepoint.com/cross-browser-web-fonts-part-3/"
  }]
}
!*/
/* DOC
Detects support for OpenType ligatures
*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('ligatures', testAllProps('fontFeatureSettings', '"liga" 1'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/lists-reversed.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/lists-reversed.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19                            2        
/*!
{
  "name": "Reverse Ordered Lists",
  "property": "olreversed",
  "notes": [{
    "name": "Impressive Webs article",
    "href": "http://impressivewebs.com/reverse-ordered-lists-html5"
  }],
  "builderAliases": ["lists_reversed"]
}
!*/
/* DOC
Detects support for the `reversed` attribute on the `<ol>` element.
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('olreversed', 'reversed' in createElement('ol'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/mathml.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/mathml.js

Statements: 14.29% (1 / 7)      Branches: 100% (0 / 0)      Functions: 0% (0 / 3)      Lines: 14.29% (1 / 7)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35                                  2                                  
/*!
{
  "name": "MathML",
  "property": "mathml",
  "caniuse": "mathml",
  "authors": ["Addy Osmani", "Davide P. Cervone", "David Carlisle"],
  "knownBugs": ["Firefox < 4 will likely return a false, however it does support MathML inside XHTML documents"],
  "notes": [{
    "name": "W3C spec",
    "href": "https://www.w3.org/Math/"
  }],
  "polyfills": ["mathjax"]
}
!*/
/* DOC
Detects support for MathML, for mathematic equations in web pages.
*/
define(['Modernizr', 'testStyles'], function(Modernizr, testStyles) {
  // Based on work by Davide (@dpvc) and David (@davidcarlisle)
  // in https://github.com/mathjax/MathJax/issues/182
 
  Modernizr.addTest('mathml', function() {
    var ret;
 
    testStyles('#modernizr{position:absolute;display:inline-block}', function(node) {
      node.innerHTML += '<math><mfrac><mi>xx</mi><mi>yy</mi></mfrac></math>';
 
      ret = node.offsetHeight > node.offsetWidth;
    });
 
    return ret;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/messagechannel.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/messagechannel.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24                                      2        
/*!
{
  "name": "Message Channel",
  "property": "MessageChannel",
  "authors": ["Raju Konga [kongaraju]"],
  "caniuse" : "MessageChannel",
  "tags": ["performance", "messagechannel"],
  "notes": [{
    "name": "W3C Reference",
    "href": "https://www.w3.org/TR/2011/WD-webmessaging-20110317/#message-channels"
  }, {
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en-US/docs/Web/API/Channel_Messaging_API/Using_channel_messaging"
  }]
}
!*/
/* DOC
Detects support for Message Channels, a way to communicate between different browsing contexts like iframes, workers, etc..
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('messagechannel', 'MessageChannel' in window);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/notification.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/notification.js

Statements: 9.09% (1 / 11)      Branches: 0% (0 / 8)      Functions: 0% (0 / 2)      Lines: 9.09% (1 / 11)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48                                                  2                                            
/*!
{
  "name": "Notification",
  "property": "notification",
  "caniuse": "notifications",
  "authors": ["Theodoor van Donge", "Hendrik Beskow"],
  "notes": [{
    "name": "HTML5 Rocks tutorial",
    "href": "http://www.html5rocks.com/en/tutorials/notifications/quick/"
  },{
    "name": "W3C spec",
    "href": "https://www.w3.org/TR/notifications/"
  }, {
    "name": "Changes in Chrome to Notifications API due to Service Worker Push Notifications",
    "href": "https://developers.google.com/web/updates/2015/05/Notifying-you-of-notificiation-changes"
  }],
  "knownBugs": [
    "Possibility of false-positive on Chrome for Android if permissions we're granted for a website prior to Chrome 44."
  ],
  "polyfills": ["desktop-notify", "html5-notifications"]
}
!*/
/* DOC
Detects support for the Notifications API
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('notification', function() {
    if (!window.Notification || !window.Notification.requestPermission) {
      return false;
    }
    // if permission is already granted, assume support
    if (window.Notification.permission === 'granted') {
      return true;
    }
 
    try {
      new window.Notification('');
    } catch (e) {
      if (e.name === 'TypeError') {
        return false;
      }
    }
 
    return true;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/pagevisibility-api.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/pagevisibility-api.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27                                            2        
/*!
{
  "name": "Page Visibility API",
  "property": "pagevisibility",
  "caniuse": "pagevisibility",
  "tags": ["performance"],
  "notes": [{
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en-US/docs/DOM/Using_the_Page_Visibility_API"
  },{
    "name": "W3C spec",
    "href": "https://www.w3.org/TR/2011/WD-page-visibility-20110602/"
  },{
    "name": "HTML5 Rocks tutorial",
    "href": "http://www.html5rocks.com/en/tutorials/pagevisibility/intro/"
  }],
  "polyfills": ["visibilityjs", "visiblyjs", "jquery-visibility"]
}
!*/
/* DOC
Detects support for the Page Visibility API, which can be used to disable unnecessary actions and otherwise improve user experience.
*/
define(['Modernizr', 'prefixed'], function(Modernizr, prefixed) {
  Modernizr.addTest('pagevisibility', !!prefixed('hidden', document, false));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/performance.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/performance.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25                                        2        
/*!
{
  "name": "Navigation Timing API",
  "property": "performance",
  "caniuse": "nav-timing",
  "tags": ["performance"],
  "authors": ["Scott Murphy (@uxder)"],
  "notes": [{
    "name": "W3C Spec",
    "href": "https://www.w3.org/TR/navigation-timing/"
  },{
    "name": "HTML5 Rocks article",
    "href": "http://www.html5rocks.com/en/tutorials/webperformance/basics/"
  }],
  "polyfills": ["perfnow"]
}
!*/
/* DOC
Detects support for the Navigation Timing API, for measuring browser and connection performance.
*/
define(['Modernizr', 'prefixed'], function(Modernizr, prefixed) {
  Modernizr.addTest('performance', !!prefixed('performance', window));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/pointerevents.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/pointerevents.js

Statements: 12.5% (1 / 8)      Branches: 0% (0 / 4)      Functions: 0% (0 / 2)      Lines: 12.5% (1 / 8)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40                                      2                                        
/*!
{
  "name": "DOM Pointer Events API",
  "property": "pointerevents",
  "tags": ["input"],
  "authors": ["Stu Cox"],
  "notes": [
    {
      "name": "W3C spec",
      "href": "https://www.w3.org/TR/pointerevents/"
    }
  ],
  "warnings": ["This property name now refers to W3C DOM PointerEvents: https://github.com/Modernizr/Modernizr/issues/548#issuecomment-12812099"],
  "polyfills": ["handjs","pep"]
}
!*/
/* DOC
Detects support for the DOM Pointer Events API, which provides a unified event interface for pointing input devices, as implemented in IE10+.
*/
define(['Modernizr', 'domPrefixes', 'hasEvent'], function(Modernizr, domPrefixes, hasEvent) {
  // **Test name hijacked!**
  // Now refers to W3C DOM PointerEvents spec rather than the CSS pointer-events property.
  Modernizr.addTest('pointerevents', function() {
    // Cannot use `.prefixed()` for events, so test each prefix
    var bool = false,
      i = domPrefixes.length;
 
    // Don't forget un-prefixed...
    bool = Modernizr.hasEvent('pointerdown');
 
    while (i-- && !bool) {
      if (hasEvent(domPrefixes[i] + 'pointerdown')) {
        bool = true;
      }
    }
    return bool;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/pointerlock-api.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/pointerlock-api.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20                            2          
/*!
{
  "name": "Pointer Lock API",
  "property": "pointerlock",
  "notes": [{
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en-US/docs/API/Pointer_Lock_API"
  }],
  "builderAliases": ["pointerlock_api"]
}
!*/
/* DOC
Detects support the pointer lock API which allows you to lock the mouse cursor to the browser window.
*/
define(['Modernizr', 'prefixed'], function(Modernizr, prefixed) {
  // https://developer.mozilla.org/en-US/docs/API/Pointer_Lock_API
  Modernizr.addTest('pointerlock', !!prefixed('exitPointerLock', document));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/postmessage.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/postmessage.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20                              2        
/*!
{
  "name": "postMessage",
  "property": "postmessage",
  "caniuse": "x-doc-messaging",
  "notes": [{
    "name": "W3C Spec",
    "href": "http://www.w3.org/TR/html5/comms.html#posting-messages"
  }],
  "polyfills": ["easyxdm", "postmessage-jquery"]
}
!*/
/* DOC
Detects support for the `window.postMessage` protocol for cross-document messaging.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('postmessage', 'postMessage' in window);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/proximity.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/proximity.js

Statements: 14.29% (2 / 14)      Branches: 0% (0 / 4)      Functions: 0% (0 / 4)      Lines: 14.29% (2 / 14)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63                                      2             1                                                                        
/*!
{
  "authors": ["Cătălin Mariș"],
  "caniuse": "proximity",
  "name": "Proximity API",
  "notes": [{
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en-US/docs/Web/API/Proximity_Events"
  },{
    "name": "W3C specification",
    "href": "https://www.w3.org/TR/proximity/"
  }],
  "property": "proximity",
  "tags": ["events", "proximity"]
}
!*/
/* DOC
Detects support for an API that allows users to get proximity related information from the device's proximity sensor.
*/
define(['Modernizr', 'addTest'], function(Modernizr, addTest) {
 
  Modernizr.addAsyncTest(function() {
 
    var timeout;
    var timeoutTime = 300;
 
    function advertiseSupport() {
 
      // Clean up after ourselves
      clearTimeout(timeout);
      window.removeEventListener('deviceproximity', advertiseSupport);
 
      // Advertise support as the browser supports
      // the API and the device has a proximity sensor
      addTest('proximity', true);
 
    }
 
    // Check if the browser has support for the API
    if ('ondeviceproximity' in window && 'onuserproximity' in window) {
 
      // Check if the device has a proximity sensor
      // ( devices without such a sensor support the events but
      //   will never fire them resulting in a false positive )
      window.addEventListener('deviceproximity', advertiseSupport);
 
      // If the event doesn't fire in a reasonable amount of time,
      // it means that the device doesn't have a proximity sensor,
      // thus, we can advertise the "lack" of support
      timeout = setTimeout(function() {
        window.removeEventListener('deviceproximity', advertiseSupport);
        addTest('proximity', false);
      }, timeoutTime);
 
    } else {
      addTest('proximity', false);
    }
 
  });
 
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/queryselector.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/queryselector.js

Statements: 50% (1 / 2)      Branches: 0% (0 / 2)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22                                  2        
/*!
{
  "name": "QuerySelector",
  "property": "queryselector",
  "caniuse": "queryselector",
  "tags": ["queryselector"],
  "authors": ["Andrew Betts (@triblondon)"],
  "notes": [{
    "name" : "W3C Selectors reference",
    "href": "https://www.w3.org/TR/selectors-api/#queryselectorall"
  }],
  "polyfills": ["css-selector-engine"]
}
!*/
/* DOC
Detects support for querySelector.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('queryselector', 'querySelector' in document && 'querySelectorAll' in document);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/quota-management-api.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/quota-management-api.js

Statements: 20% (1 / 5)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 20% (1 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25                              2                  
/*!
{
  "name": "Quota Storage Management API",
  "property": "quotamanagement",
  "tags": ["storage"],
  "builderAliases": ["quota_management_api"],
  "notes": [{
    "name": "W3C Spec",
    "href": "https://www.w3.org/TR/quota-api/"
  }]
}
!*/
/* DOC
Detects the ability to request a specific amount of space for filesystem access
*/
define(['Modernizr', 'prefixed'], function(Modernizr, prefixed) {
  Modernizr.addTest('quotamanagement', function() {
    var tempStorage = prefixed('temporaryStorage', navigator);
    var persStorage = prefixed('persistentStorage', navigator);
 
    return !!(tempStorage && persStorage);
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/requestanimationframe.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/requestanimationframe.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23                                    2        
/*!
{
  "name": "requestAnimationFrame",
  "property": "requestanimationframe",
  "aliases": ["raf"],
  "caniuse": "requestanimationframe",
  "tags": ["animation"],
  "authors": ["Addy Osmani"],
  "notes": [{
    "name": "W3C spec",
    "href": "https://www.w3.org/TR/animation-timing/"
  }],
  "polyfills": ["raf"]
}
!*/
/* DOC
Detects support for the `window.requestAnimationFrame` API, for offloading animation repainting to the browser for optimized performance.
*/
define(['Modernizr', 'prefixed'], function(Modernizr, prefixed) {
  Modernizr.addTest('requestanimationframe', !!prefixed('requestAnimationFrame', window), {aliases: ['raf']});
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/serviceworker.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/serviceworker.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18                          2        
/*!
{
  "name": "ServiceWorker API",
  "property": "serviceworker",
  "notes": [{
    "name": "ServiceWorkers Explained",
    "href": "https://github.com/slightlyoff/ServiceWorker/blob/master/explainer.md"
  }]
}
!*/
/* DOC
ServiceWorkers (formerly Navigation Controllers) are a way to persistently cache resources to built apps that work better offline.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('serviceworker', 'serviceWorker' in navigator);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/svg.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/svg.js

Statements: 50% (1 / 2)      Branches: 0% (0 / 2)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27                                            2        
/*!
{
  "name": "SVG",
  "property": "svg",
  "caniuse": "svg",
  "tags": ["svg"],
  "authors": ["Erik Dahlstrom"],
  "polyfills": [
    "svgweb",
    "raphael",
    "amplesdk",
    "canvg",
    "svg-boilerplate",
    "sie",
    "dojogfx",
    "fabricjs"
  ]
}
!*/
/* DOC
Detects support for SVG in `<embed>` or `<object>` elements.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('svg', !!document.createElementNS && !!document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/templatestrings.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/templatestrings.js

Statements: 14.29% (1 / 7)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 14.29% (1 / 7)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28                          2                            
/*!
{
  "name": "Template strings",
  "property": "templatestrings",
  "notes": [{
    "name": "MDN Reference",
    "href": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/template_strings#Browser_compatibility"
  }]
}
!*/
/* DOC
Template strings are string literals allowing embedded expressions.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('templatestrings', function() {
    var supports;
    try {
      // A number of tools, including uglifyjs and require, break on a raw "`", so
      // use an eval to get around that.
      // eslint-disable-next-line
      eval('``');
      supports = true;
    } catch (e) {}
    return !!supports;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/touchevents.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/touchevents.js

Statements: 11.11% (1 / 9)      Branches: 0% (0 / 5)      Functions: 0% (0 / 3)      Lines: 11.11% (1 / 9)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54                                                                      2                                    
/*!
{
  "name": "Touch Events",
  "property": "touchevents",
  "caniuse" : "touch",
  "tags": ["media", "attribute"],
  "notes": [{
    "name": "Touch Events spec",
    "href": "https://www.w3.org/TR/2013/WD-touch-events-20130124/"
  }],
  "warnings": [
    "Indicates if the browser supports the Touch Events spec, and does not necessarily reflect a touchscreen device"
  ],
  "knownBugs": [
    "False-positive on some configurations of Nokia N900",
    "False-positive on some BlackBerry 6.0 builds – https://github.com/Modernizr/Modernizr/issues/372#issuecomment-3112695"
  ]
}
!*/
/* DOC
Indicates if the browser supports the W3C Touch Events API.
 
This *does not* necessarily reflect a touchscreen device:
 
* Older touchscreen devices only emulate mouse events
* Modern IE touch devices implement the Pointer Events API instead: use `Modernizr.pointerevents` to detect support for that
* Some browsers & OS setups may enable touch APIs when no touchscreen is connected
* Future browsers may implement other event models for touch interactions
 
See this article: [You Can't Detect A Touchscreen](http://www.stucox.com/blog/you-cant-detect-a-touchscreen/).
 
It's recommended to bind both mouse and touch/pointer events simultaneously – see [this HTML5 Rocks tutorial](http://www.html5rocks.com/en/mobile/touchandmouse/).
 
This test will also return `true` for Firefox 4 Multitouch support.
*/
define(['Modernizr', 'prefixes', 'testStyles'], function(Modernizr, prefixes, testStyles) {
  // Chrome (desktop) used to lie about its support on this, but that has since been rectified: http://crbug.com/36415
  Modernizr.addTest('touchevents', function() {
    var bool;
    if (('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {
      bool = true;
    } else {
      // include the 'heartz' as a way to have a non matching MQ to help terminate the join
      // https://git.io/vznFH
      var query = ['@media (', prefixes.join('touch-enabled),('), 'heartz', ')', '{#modernizr{top:9px;position:absolute}}'].join('');
      testStyles(query, function(node) {
        bool = node.offsetTop === 9;
      });
    }
    return bool;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/typed-arrays.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/typed-arrays.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38                                            2                              
/*!
{
  "name": "Typed arrays",
  "property": "typedarrays",
  "caniuse": "typedarrays",
  "tags": ["js"],
  "authors": ["Stanley Stuart (@fivetanley)"],
  "notes": [{
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en-US/docs/JavaScript_typed_arrays"
  },{
    "name": "Kronos spec",
    "href": "https://www.khronos.org/registry/typedarray/specs/latest/"
  }],
  "polyfills": ["joshuabell-polyfill"]
}
!*/
/* DOC
Detects support for native binary data manipulation via Typed Arrays in JavaScript.
 
Does not check for DataView support; use `Modernizr.dataview` for that.
*/
define(['Modernizr'], function(Modernizr) {
  // Should fail in:
  // Internet Explorer <= 9
  // Firefox <= 3.6
  // Chrome <= 6.0
  // iOS Safari < 4.2
  // Safari < 5.1
  // Opera < 11.6
  // Opera Mini, <= 7.0
  // Android Browser < 4.0
  // Blackberry Browser < 10.0
 
  Modernizr.addTest('typedarrays', 'ArrayBuffer' in window);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/unicode-range.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/unicode-range.js

Statements: 9.09% (1 / 11)      Branches: 0% (0 / 4)      Functions: 0% (0 / 3)      Lines: 9.09% (1 / 11)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39                          2                                                  
/*!
{
  "name": "Unicode Range",
  "property": "unicoderange",
  "notes": [{
    "name" : "W3C reference",
    "href": "https://www.w3.org/TR/2013/CR-css-fonts-3-20131003/#descdef-unicode-range"
  }, {
    "name" : "24 Way article",
    "href": "https://24ways.org/2011/creating-custom-font-stacks-with-unicode-range"
  }]
}
!*/
define(['Modernizr', 'testStyles', 'createElement'], function(Modernizr, testStyles, createElement) {
  Modernizr.addTest('unicoderange', function() {
 
    return Modernizr.testStyles('@font-face{font-family:"unicodeRange";src:local("Arial");unicode-range:U+0020,U+002E}#modernizr span{font-size:20px;display:inline-block;font-family:"unicodeRange",monospace}#modernizr .mono{font-family:monospace}', function(elem) {
 
      // we use specify a unicode-range of 002E (the `.` glyph,
      // and a monospace font as the fallback. If the first of
      // these test glyphs is a different width than the other
      // the other three (which are all monospace), then we
      // have a winner.
      var testGlyphs = ['.', '.', 'm', 'm'];
 
      for (var i = 0; i < testGlyphs.length; i++) {
        var elm = createElement('span');
        elm.innerHTML = testGlyphs[i];
        elm.className = i % 2 ? 'mono' : '';
        elem.appendChild(elm);
        testGlyphs[i] = elm.clientWidth;
      }
 
      return (testGlyphs[0] !== testGlyphs[1] && testGlyphs[2] === testGlyphs[3]);
    });
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/unicode.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/unicode.js

Statements: 8.33% (1 / 12)      Branches: 0% (0 / 6)      Functions: 0% (0 / 3)      Lines: 8.33% (1 / 12)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43                          2                                                          
/*!
{
  "name": "Unicode characters",
  "property": "unicode",
  "tags": ["encoding"],
  "warnings": [
    "positive Unicode support doesn't mean you can use it inside <title>, this seems more related to OS & Language packs"
  ]
}
!*/
/* DOC
Detects if unicode characters are supported in the current document.
*/
define(['Modernizr', 'createElement', 'testStyles', 'isSVG'], function(Modernizr, createElement, testStyles, isSVG) {
  /**
   * Unicode special character support
   *
   * Detection is made by testing missing glyph box rendering against star character
   * If widths are the same, this "probably" means the browser didn't support the star character and rendered a glyph box instead
   * Just need to ensure the font characters have different widths
   */
  Modernizr.addTest('unicode', function() {
    var bool;
    var missingGlyph = createElement('span');
    var star = createElement('span');
 
    testStyles('#modernizr{font-family:Arial,sans;font-size:300em;}', function(node) {
 
      missingGlyph.innerHTML = isSVG ? '\u5987' : '&#5987;';
      star.innerHTML = isSVG ? '\u2606' : '&#9734;';
 
      node.appendChild(missingGlyph);
      node.appendChild(star);
 
      bool = 'offsetWidth' in missingGlyph && missingGlyph.offsetWidth !== star.offsetWidth;
    });
 
    return bool;
 
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/userdata.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/userdata.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20                              2        
/*!
{
  "name": "IE User Data API",
  "property": "userdata",
  "tags": ["storage"],
  "authors": ["@stereobooster"],
  "notes": [{
    "name": "MSDN Documentation",
    "href": "https://msdn.microsoft.com/en-us/library/ms531424.aspx"
  }]
}
!*/
/* DOC
Detects support for IE userData for persisting data, an API similar to localStorage but supported since IE5.
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('userdata', !!createElement('div').addBehavior);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/vibration.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/vibration.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21                                2        
/*!
{
  "name": "Vibration API",
  "property": "vibrate",
  "notes": [{
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en/DOM/window.navigator.mozVibrate"
  },{
    "name": "W3C spec",
    "href": "https://www.w3.org/TR/vibration/"
  }]
}
!*/
/* DOC
Detects support for the API that provides access to the vibration mechanism of the hosting device, to provide tactile feedback.
*/
define(['Modernizr', 'prefixed'], function(Modernizr, prefixed) {
  Modernizr.addTest('vibrate', !!prefixed('vibrate', navigator));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/video.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/video.js

Statements: 7.14% (1 / 14)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 7.14% (1 / 14)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64                                                          2                                                                    
/*!
{
  "name": "HTML5 Video",
  "property": "video",
  "caniuse": "video",
  "tags": ["html5"],
  "knownBugs": [
    "Without QuickTime, `Modernizr.video.h264` will be `undefined`; https://github.com/Modernizr/Modernizr/issues/546"
  ],
  "polyfills": [
    "html5media",
    "mediaelementjs",
    "sublimevideo",
    "videojs",
    "leanbackplayer",
    "videoforeverybody"
  ]
}
!*/
/* DOC
Detects support for the video element, as well as testing what types of content it supports.
 
Subproperties are provided to describe support for `ogg`, `h264` and `webm` formats, e.g.:
 
```javascript
Modernizr.video         // true
Modernizr.video.ogg     // 'probably'
```
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  // Codec values from : github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845
  //                     thx to NielsLeenheer and zcorpan
 
  // Note: in some older browsers, "no" was a return value instead of empty string.
  //   It was live in FF3.5.0 and 3.5.1, but fixed in 3.5.2
  //   It was also live in Safari 4.0.0 - 4.0.4, but fixed in 4.0.5
 
  Modernizr.addTest('video', function() {
    var elem = createElement('video');
    var bool = false;
 
    // IE9 Running on Windows Server SKU can cause an exception to be thrown, bug #224
    try {
      bool = !!elem.canPlayType
      if (bool) {
        bool = new Boolean(bool);
        bool.ogg = elem.canPlayType('video/ogg; codecs="theora"').replace(/^no$/, '');
 
        // Without QuickTime, this value will be `undefined`. github.com/Modernizr/Modernizr/issues/546
        bool.h264 = elem.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/, '');
 
        bool.webm = elem.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/, '');
 
        bool.vp9 = elem.canPlayType('video/webm; codecs="vp9"').replace(/^no$/, '');
 
        bool.hls = elem.canPlayType('application/x-mpegURL; codecs="avc1.42E01E"').replace(/^no$/, '');
      }
    } catch (e) {}
 
    return bool;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/vml.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/vml.js

Statements: 8.33% (1 / 12)      Branches: 0% (0 / 6)      Functions: 0% (0 / 2)      Lines: 8.33% (1 / 12)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39                                      2                                      
/*!
{
  "name": "VML",
  "property": "vml",
  "caniuse": "vml",
  "tags": ["vml"],
  "authors": ["Craig Andrews (@candrews)"],
  "notes": [{
    "name" : "W3C VML reference",
    "href": "https://www.w3.org/TR/NOTE-VML"
  },{
    "name" : "Microsoft VML reference",
    "href": "https://msdn.microsoft.com/en-us/library/bb263898.aspx"
  }]
}
!*/
/* DOC
Detects support for VML.
*/
define(['Modernizr', 'createElement', 'isSVG'], function(Modernizr, createElement, isSVG) {
  Modernizr.addTest('vml', function() {
    var containerDiv = createElement('div');
    var supports = false;
    var shape;
 
    if (!isSVG) {
      containerDiv.innerHTML = '<v:shape id="vml_flag1" adj="1" />';
      shape = containerDiv.firstChild;
      if ('style' in shape) {
        shape.style.behavior = 'url(#default#VML)';
      }
      supports = shape ? typeof shape.adj == 'object' : true;
    }
 
    return supports;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/web-intents.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/web-intents.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24                                      2        
/*!
{
  "name": "Web Intents",
  "property": "webintents",
  "authors": ["Eric Bidelman"],
  "notes": [{
    "name": "Web Intents project site",
    "href": "http://webintents.org/"
  }],
  "polyfills": ["webintents"],
  "builderAliases": ["web_intents"]
}
!*/
/* DOC
Detects native support for the Web Intents APIs for service discovery and inter-application communication.
 
Chrome added support for this in v19, but [removed it again in v24](https://lists.w3.org/Archives/Public/public-web-intents/2012Nov/0000.html) because of "a number of areas for
development in both the API and specific user experience in Chrome". No other browsers currently support it, however a [JavaScript shim](http://webintents.org/#javascriptshim) is available.
*/
define(['Modernizr', 'prefixed'], function(Modernizr, prefixed) {
  Modernizr.addTest('webintents', !!prefixed('startActivity', navigator));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/webanimations.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/webanimations.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20                              2        
/*!
{
  "name": "Web Animation API",
  "property": "animation",
  "tags": ["webanimations"],
  "polyfills": ["webanimationsjs"],
  "notes": [{
    "name": "Introducing Web Animations",
    "href": "http://brian.sol1.net/svg/2013/06/26/introducing-web-animations/"
  }]
}
!*/
/* DOC
Detects support for the Web Animation API, a way to create css animations in js
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('webanimations', 'animate' in createElement('div'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/webgl.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/webgl.js

Statements: 14.29% (1 / 7)      Branches: 0% (0 / 6)      Functions: 0% (0 / 2)      Lines: 14.29% (1 / 7)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21                  2                      
/*!
{
  "name": "WebGL",
  "property": "webgl",
  "caniuse": "webgl",
  "tags": ["webgl", "graphics"],
  "polyfills": ["jebgl", "cwebgl", "iewebgl"]
}
!*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('webgl', function() {
    var canvas = createElement('canvas');
    var supports = 'probablySupportsContext' in canvas ? 'probablySupportsContext' :  'supportsContext';
    if (supports in canvas) {
      return canvas[supports]('webgl') || canvas[supports]('experimental-webgl');
    }
    return 'WebGLRenderingContext' in window;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/websockets.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/websockets.js

Statements: 20% (1 / 5)      Branches: 0% (0 / 2)      Functions: 0% (0 / 1)      Lines: 20% (1 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35                                                    2                
/*!
{
  "name": "WebSockets Support",
  "property": "websockets",
  "authors": ["Phread [fearphage]", "Mike Sherov [mikesherov]", "Burak Yigit Kaya [BYK]"],
  "caniuse": "websockets",
  "tags": ["html5"],
  "warnings": [
    "This test will reject any old version of WebSockets even if it is not prefixed such as in Safari 5.1"
  ],
  "notes": [{
    "name": "CLOSING State and Spec",
    "href": "https://www.w3.org/TR/websockets/#the-websocket-interface"
  }],
  "polyfills": [
    "sockjs",
    "socketio",
    "kaazing-websocket-gateway",
    "websocketjs",
    "atmosphere",
    "graceful-websocket",
    "portal",
    "datachannel"
  ]
}
!*/
define(['Modernizr'], function(Modernizr) {
  var supports = false;
  try {
    supports = 'WebSocket' in window && window.WebSocket.CLOSING === 2;
  } catch (e) {}
  Modernizr.addTest('websockets', supports);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/xdomainrequest.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/xdomainrequest.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25                                        2        
/*!
{
  "name": "XDomainRequest",
  "property": "xdomainrequest",
  "tags": ["cors", "xdomainrequest", "ie9", "ie8"],
  "authors": ["Ivan Pan (@hypotenuse)"],
  "notes": [
  {
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en-US/docs/Web/API/XDomainRequest"
  },
  {
    "name": "MSDN documentation",
    "href": "https://msdn.microsoft.com/library/ie/cc288060.aspx/"
  }]
}
!*/
/* DOC
Detects support for XDomainRequest in IE9 & IE8
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('xdomainrequest', 'XDomainRequest' in window);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/a/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/a/

Statements: 50% (1 / 2)      Branches: 0% (0 / 2)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/a/
File Statements Branches Functions Lines
download.js 50% (1 / 2) 0% (0 / 2) 0% (0 / 1) 50% (1 / 2)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/a/download.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/a/download.js

Statements: 50% (1 / 2)      Branches: 0% (0 / 2)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21                                2        
/*!
{
  "name": "a[download] Attribute",
  "property": "adownload",
  "caniuse" : "download",
  "tags": ["media", "attribute"],
  "builderAliases": ["a_download"],
  "notes": [{
    "name": "WhatWG Reference",
    "href": "https://developers.whatwg.org/links.html#downloading-resources"
  }]
}
!*/
/* DOC
When used on an `<a>`, this attribute signifies that the resource it points to should be downloaded by the browser rather than navigating to it.
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('adownload', !window.externalHost && 'download' in createElement('a'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/audio/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/audio/

Statements: 8.7% (4 / 46)      Branches: 0% (0 / 20)      Functions: 0% (0 / 7)      Lines: 8.7% (4 / 46)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/audio/
File Statements Branches Functions Lines
loop.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
preload.js 5.41% (2 / 37) 0% (0 / 16) 0% (0 / 4) 5.41% (2 / 37)
webaudio.js 14.29% (1 / 7) 0% (0 / 4) 0% (0 / 2) 14.29% (1 / 7)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/audio/loop.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/audio/loop.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15                    2        
/*!
{
  "name": "Audio Loop Attribute",
  "property": "audioloop",
  "tags": ["audio", "media"]
}
!*/
/* DOC
Detects if an audio element can automatically restart, once it has finished
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('audioloop', 'loop' in createElement('audio'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/audio/preload.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/audio/preload.js

Statements: 5.41% (2 / 37)      Branches: 0% (0 / 16)      Functions: 0% (0 / 4)      Lines: 5.41% (2 / 37)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77                        2               1                                                                                                                
/*!
{
  "name": "Audio Preload",
  "property": "audiopreload",
  "tags": ["audio", "media"],
  "async" : true,
  "warnings": ["This test is very large – only include it if you absolutely need it"]
}
!*/
/* DOC
Detects if audio can be downloaded in the background before it starts playing in the `<audio>` element
*/
define(['Modernizr', 'addTest', 'docElement', 'createElement', 'test/audio'], function(Modernizr, addTest, docElement, createElement) {
 
  Modernizr.addAsyncTest(function() {
    var timeout;
    var waitTime = 300;
    var elem = createElement('audio');
    var elemStyle = elem.style;
 
    function testpreload(event) {
      clearTimeout(timeout);
      var result = event !== undefined && event.type === 'loadeddata' ? true : false; //need to check if event is not undefined here in case function is evoked from timeout (no parameters)
      elem.removeEventListener('loadeddata', testpreload, false);
      addTest('audiopreload', result);
      elem.parentNode.removeChild(elem);
    }
 
    //skip the test if audio itself, or the preload
    //element on it isn't supported
    if (!Modernizr.audio || !('preload' in elem)) {
      addTest('audiopreload', false);
      return;
    }
 
    elemStyle.position = 'absolute';
    elemStyle.height = 0;
    elemStyle.width = 0;
 
    try {
      if (Modernizr.audio.mp3) {
        //75ms of silence (minumum Mp3 duration loaded by Safari, not tested other formats thoroughly: may be possible to shrink base64 URI)
        elem.src = 'data:audio/mpeg;base64,//MUxAAB6AXgAAAAAPP+c6nf//yi/6f3//MUxAMAAAIAAAjEcH//0fTX6C9Lf//0//MUxA4BeAIAAAAAAKX2/6zv//+IlR4f//MUxBMCMAH8AAAAABYWalVMQU1FMy45//MUxBUB0AH0AAAAADkuM1VVVVVVVVVV//MUxBgBUATowAAAAFVVVVVVVVVVVVVV';
      }
      else if (Modernizr.audio.m4a) {
        elem.src = 'data:audio/x-m4a;base64,AAAAGGZ0eXBNNEEgAAACAGlzb21pc28yAAAACGZyZWUAAAAfbWRhdN4EAABsaWJmYWFjIDEuMjgAAAFoAQBHAAACiG1vb3YAAABsbXZoZAAAAAB8JbCAfCWwgAAAA+gAAAAYAAEAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAG0dHJhawAAAFx0a2hkAAAAD3wlsIB8JbCAAAAAAQAAAAAAAAAYAAAAAAAAAAAAAAAAAQAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAABUG1kaWEAAAAgbWRoZAAAAAB8JbCAfCWwgAAArEQAAAQAVcQAAAAAAC1oZGxyAAAAAAAAAABzb3VuAAAAAAAAAAAAAAAAU291bmRIYW5kbGVyAAAAAPttaW5mAAAAEHNtaGQAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAL9zdGJsAAAAW3N0c2QAAAAAAAAAAQAAAEttcDRhAAAAAAAAAAEAAAAAAAAAAAACABAAAAAArEQAAAAAACdlc2RzAAAAAAMZAAEABBFAFQAAAAABftAAAAAABQISCAYBAgAAABhzdHRzAAAAAAAAAAEAAAABAAAEAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAAUc3RzegAAAAAAAAAXAAAAAQAAABRzdGNvAAAAAAAAAAEAAAAoAAAAYHVkdGEAAABYbWV0YQAAAAAAAAAhaGRscgAAAAAAAAAAbWRpcmFwcGwAAAAAAAAAAAAAAAAraWxzdAAAACOpdG9vAAAAG2RhdGEAAAABAAAAAExhdmY1Mi42NC4y';
      }
      else if (Modernizr.audio.ogg) {
        elem.src = 'data:audio/ogg;base64,T2dnUwACAAAAAAAAAAD/QwAAAAAAAM2LVKsBHgF2b3JiaXMAAAAAAUSsAAAAAAAAgLsAAAAAAAC4AU9nZ1MAAAAAAAAAAAAA/0MAAAEAAADmvOe6Dy3/////////////////MgN2b3JiaXMdAAAAWGlwaC5PcmcgbGliVm9yYmlzIEkgMjAwNzA2MjIAAAAAAQV2b3JiaXMfQkNWAQAAAQAYY1QpRplS0kqJGXOUMUaZYpJKiaWEFkJInXMUU6k515xrrLm1IIQQGlNQKQWZUo5SaRljkCkFmVIQS0kldBI6J51jEFtJwdaYa4tBthyEDZpSTCnElFKKQggZU4wpxZRSSkIHJXQOOuYcU45KKEG4nHOrtZaWY4updJJK5yRkTEJIKYWSSgelU05CSDWW1lIpHXNSUmpB6CCEEEK2IIQNgtCQVQAAAQDAQBAasgoAUAAAEIqhGIoChIasAgAyAAAEoCiO4iiOIzmSY0kWEBqyCgAAAgAQAADAcBRJkRTJsSRL0ixL00RRVX3VNlVV9nVd13Vd13UgNGQVAAABAEBIp5mlGiDCDGQYCA1ZBQAgAAAARijCEANCQ1YBAAABAABiKDmIJrTmfHOOg2Y5aCrF5nRwItXmSW4q5uacc845J5tzxjjnnHOKcmYxaCa05pxzEoNmKWgmtOacc57E5kFrqrTmnHPGOaeDcUYY55xzmrTmQWo21uaccxa0pjlqLsXmnHMi5eZJbS7V5pxzzjnnnHPOOeecc6oXp3NwTjjnnHOi9uZabkIX55xzPhmne3NCOOecc84555xzzjnnnHOC0JBVAAAQAABBGDaGcacgSJ+jgRhFiGnIpAfdo8MkaAxyCqlHo6ORUuoglFTGSSmdIDRkFQAACAAAIYQUUkghhRRSSCGFFFKIIYYYYsgpp5yCCiqppKKKMsoss8wyyyyzzDLrsLPOOuwwxBBDDK20EktNtdVYY62555xrDtJaaa211koppZRSSikIDVkFAIAAABAIGWSQQUYhhRRSiCGmnHLKKaigAkJDVgEAgAAAAgAAADzJc0RHdERHdERHdERHdETHczxHlERJlERJtEzL1ExPFVXVlV1b1mXd9m1hF3bd93Xf93Xj14VhWZZlWZZlWZZlWZZlWZZlWYLQkFUAAAgAAIAQQgghhRRSSCGlGGPMMeegk1BCIDRkFQAACAAgAAAAwFEcxXEkR3IkyZIsSZM0S7M8zdM8TfREURRN01RFV3RF3bRF2ZRN13RN2XRVWbVdWbZt2dZtX5Zt3/d93/d93/d93/d93/d1HQgNWQUASAAA6EiOpEiKpEiO4ziSJAGhIasAABkAAAEAKIqjOI7jSJIkSZakSZ7lWaJmaqZneqqoAqEhqwAAQAAAAQAAAAAAKJriKabiKaLiOaIjSqJlWqKmaq4om7Lruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7rui4QGrIKAJAAANCRHMmRHEmRFEmRHMkBQkNWAQAyAAACAHAMx5AUybEsS9M8zdM8TfRET/RMTxVd0QVCQ1YBAIAAAAIAAAAAADAkw1IsR3M0SZRUS7VUTbVUSxVVT1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTVN0zRNIDRkJQAABADAYo3B5SAhJSXl3hDCEJOeMSYhtV4hBJGS3jEGFYOeMqIMct5C4xCDHggNWREARAEAAMYgxxBzyDlHqZMSOeeodJQa5xyljlJnKcWYYs0oldhSrI1zjlJHraOUYiwtdpRSjanGAgAAAhwAAAIshEJDVgQAUQAAhDFIKaQUYow5p5xDjCnnmHOGMeYcc44556B0UirnnHROSsQYc445p5xzUjonlXNOSiehAACAAAcAgAALodCQFQFAnACAQZI8T/I0UZQ0TxRFU3RdUTRd1/I81fRMU1U90VRVU1Vt2VRVWZY8zzQ901RVzzRV1VRVWTZVVZZFVdVt03V123RV3ZZt2/ddWxZ2UVVt3VRd2zdV1/Zd2fZ9WdZ1Y/I8VfVM03U903Rl1XVtW3VdXfdMU5ZN15Vl03Vt25VlXXdl2fc103Rd01Vl2XRd2XZlV7ddWfZ903WF35VlX1dlWRh2XfeFW9eV5XRd3VdlVzdWWfZ9W9eF4dZ1YZk8T1U903RdzzRdV3VdX1dd19Y105Rl03Vt2VRdWXZl2fddV9Z1zzRl2XRd2zZdV5ZdWfZ9V5Z13XRdX1dlWfhVV/Z1WdeV4dZt4Tdd1/dVWfaFV5Z14dZ1Ybl1XRg+VfV9U3aF4XRl39eF31luXTiW0XV9YZVt4VhlWTl+4ViW3feVZXRdX1ht2RhWWRaGX/id5fZ943h1XRlu3efMuu8Mx++k+8rT1W1jmX3dWWZfd47hGDq/8OOpqq+brisMpywLv+3rxrP7vrKMruv7qiwLvyrbwrHrvvP8vrAso+z6wmrLwrDatjHcvm4sv3Acy2vryjHrvlG2dXxfeArD83R1XXlmXcf2dXTjRzh+ygAAgAEHAIAAE8pAoSErAoA4AQCPJImiZFmiKFmWKIqm6LqiaLqupGmmqWmeaVqaZ5qmaaqyKZquLGmaaVqeZpqap5mmaJqua5qmrIqmKcumasqyaZqy7LqybbuubNuiacqyaZqybJqmLLuyq9uu7Oq6pFmmqXmeaWqeZ5qmasqyaZquq3meanqeaKqeKKqqaqqqraqqLFueZ5qa6KmmJ4qqaqqmrZqqKsumqtqyaaq2bKqqbbuq7Pqybeu6aaqybaqmLZuqatuu7OqyLNu6L2maaWqeZ5qa55mmaZqybJqqK1uep5qeKKqq5ommaqqqLJumqsqW55mqJ4qq6omea5qqKsumatqqaZq2bKqqLZumKsuubfu+68qybqqqbJuqauumasqybMu+78qq7oqmKcumqtqyaaqyLduy78uyrPuiacqyaaqybaqqLsuybRuzbPu6aJqybaqmLZuqKtuyLfu6LNu678qub6uqrOuyLfu67vqucOu6MLyybPuqrPq6K9u6b+sy2/Z9RNOUZVM1bdtUVVl2Zdn2Zdv2fdE0bVtVVVs2TdW2ZVn2fVm2bWE0Tdk2VVXWTdW0bVmWbWG2ZeF2Zdm3ZVv2ddeVdV/XfePXZd3murLty7Kt+6qr+rbu+8Jw667wCgAAGHAAAAgwoQwUGrISAIgCAACMYYwxCI1SzjkHoVHKOecgZM5BCCGVzDkIIZSSOQehlJQy5yCUklIIoZSUWgshlJRSawUAABQ4AAAE2KApsThAoSErAYBUAACD41iW55miatqyY0meJ4qqqaq27UiW54miaaqqbVueJ4qmqaqu6+ua54miaaqq6+q6aJqmqaqu67q6Lpqiqaqq67qyrpumqqquK7uy7Oumqqqq68quLPvCqrquK8uybevCsKqu68qybNu2b9y6ruu+7/vCka3rui78wjEMRwEA4AkOAEAFNqyOcFI0FlhoyEoAIAMAgDAGIYMQQgYhhJBSSiGllBIAADDgAAAQYEIZKDRkRQAQJwAAGEMppJRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkgppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkqppJRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoplVJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSCgCQinAAkHowoQwUGrISAEgFAACMUUopxpyDEDHmGGPQSSgpYsw5xhyUklLlHIQQUmktt8o5CCGk1FJtmXNSWosx5hgz56SkFFvNOYdSUoux5ppr7qS0VmuuNedaWqs115xzzbm0FmuuOdecc8sx15xzzjnnGHPOOeecc84FAOA0OACAHtiwOsJJ0VhgoSErAYBUAAACGaUYc8456BBSjDnnHIQQIoUYc845CCFUjDnnHHQQQqgYc8w5CCGEkDnnHIQQQgghcw466CCEEEIHHYQQQgihlM5BCCGEEEooIYQQQgghhBA6CCGEEEIIIYQQQgghhFJKCCGEEEIJoZRQAABggQMAQIANqyOcFI0FFhqyEgAAAgCAHJagUs6EQY5Bjw1BylEzDUJMOdGZYk5qMxVTkDkQnXQSGWpB2V4yCwAAgCAAIMAEEBggKPhCCIgxAABBiMwQCYVVsMCgDBoc5gHAA0SERACQmKBIu7iALgNc0MVdB0IIQhCCWBxAAQk4OOGGJ97whBucoFNU6iAAAAAAAAwA4AEA4KAAIiKaq7C4wMjQ2ODo8AgAAAAAABYA+AAAOD6AiIjmKiwuMDI0Njg6PAIAAAAAAAAAAICAgAAAAAAAQAAAAICAT2dnUwAE7AwAAAAAAAD/QwAAAgAAADuydfsFAQEBAQEACg4ODg==';
      }
      else if (Modernizr.audio.wav) {
        elem.src = 'data:audio/wav;base64,UklGRvwZAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YdgZAAAAAAEA/v8CAP//AAABAP////8DAPz/BAD9/wEAAAAAAAAAAAABAP7/AgD//wAAAQD//wAAAQD//wAAAQD+/wIA//8AAAAAAAD//wIA/v8BAAAA//8BAAAA//8BAP//AQAAAP//AQD//wEAAAD//wEA//8BAP//AQD//wEA//8BAP//AQD+/wMA/f8DAP3/AgD+/wIA/////wMA/f8CAP7/AgD+/wMA/f8CAP7/AgD//wAAAAAAAAAAAQD+/wIA/v8CAP7/AwD9/wIA/v8BAAEA/v8CAP7/AQAAAAAAAAD//wEAAAD//wIA/f8DAP7/AQD//wEAAAD//wEA//8CAP7/AQD//wIA/v8CAP7/AQAAAAAAAAD//wEAAAAAAAAA//8BAP//AgD9/wQA+/8FAPz/AgAAAP//AgD+/wEAAAD//wIA/v8CAP3/BAD8/wQA/P8DAP7/AwD8/wQA/P8DAP7/AQAAAAAA//8BAP//AgD+/wEAAAD//wIA/v8BAP//AQD//wEAAAD//wEA//8BAAAAAAAAAP//AgD+/wEAAAAAAAAAAAD//wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AgD+/wIA/v8BAP//AQABAP7/AQD//wIA/v8CAP3/AwD/////AgD9/wMA/v8BAP//AQAAAP//AQD//wEA//8BAP//AAABAP//AAABAP//AQD//wAAAAACAP3/AwD9/wIA//8BAP//AQD//wEA//8BAP//AgD9/wMA/v8AAAIA/f8CAAAA/v8EAPv/BAD9/wIAAAD+/wQA+v8HAPr/BAD+/wEAAAD//wIA/f8EAPz/BAD7/wUA/P8EAPz/AwD+/wEAAAD//wEAAAAAAP//AgD8/wUA+/8FAPz/AwD9/wIA//8AAAEA/v8CAP//AQD//wAAAAABAP//AgD9/wMA/f8EAPz/AwD+/wAAAwD7/wUA/P8DAP7/AQAAAP//AgD+/wEAAQD+/wIA/v8BAAEA/v8CAP7/AQAAAP//AgD9/wMA/f8DAP7/AgD+/wEAAAAAAAEA//8AAAEA/v8DAP3/AgD//wEA//8BAP7/AwD9/wMA/v8BAP//AQAAAP//AgD9/wMA/v8BAP//AQAAAP//AgD+/wEAAQD+/wIA/////wIA//8AAAEA/f8DAP//AAABAP////8DAP3/AwD+/wEA//8BAP//AQAAAAAA//8BAP//AQD//wEA//8BAP//AAAAAAEA//8BAP7/AgD//wEA//8AAAAAAAAAAAAAAAD//wIA/v8BAAAA//8BAAEA/v8BAAAA//8DAPz/AwD+/wIA/v8CAP3/AwD+/wEAAAD//wEA//8BAAAA//8BAAAA/v8EAPv/BAD+/wAAAAABAP7/AgD//wAAAAABAP7/AgD//wAAAAAAAAAAAAABAP3/BAD8/wQA/f8BAAAAAAABAP7/AgD+/wIA/v8CAP7/AgD+/wIA/v8BAAAAAAD//wIA/f8DAP7/AAABAP//AAACAPz/BAD9/wIA//8AAP//AwD9/wMA/P8EAP3/AwD9/wIA//8BAP//AQD+/wMA/f8DAP7/AAABAP//AQAAAP//AQD//wIA/f8DAP7/AQAAAP//AQAAAAAA//8CAP7/AQABAP7/AgD+/wEAAQD+/wIA/v8CAP////8CAP7/AgD//wAAAAABAP7/AwD9/wIAAAD+/wMA/f8CAP//AQD+/wMA/f8CAP//AAACAPz/BQD6/wUA/v///wIA/v8CAP3/BAD7/wYA+v8FAPz/AwD/////AgD+/wEAAAD//wEAAAD//wIA/f8DAP7/AQAAAP//AgD//wAA//8BAAAAAAAAAP//AQD//wEA//8AAAIA/f8DAP3/AgAAAP//AQD//wEA//8AAAEA//8BAP////8CAP//AAABAP3/BAD9/wIA/v8BAAEA//8BAP7/AgD//wEA//8AAAEA//8BAP//AAAAAAEA//8BAP7/AgD//wEA//8AAAAAAQD+/wIA/v8BAAAAAAD//wIA/v8BAAAAAAAAAAAAAQD+/wMA/f8CAP//AQD//wIA/f8DAP7/AQD//wEA//8CAP7/AAABAP7/AwD9/wMA/v8AAAEA//8BAAAAAAD//wIA/v8BAAAA//8CAP7/AgD+/wEA//8CAP7/AgD//wAAAAAAAAAAAQD//wEA/v8DAPz/BQD8/wIA//8AAAEAAAD//wEA//8BAP//AQAAAAAA//8BAP//AgD+/wEAAAAAAP//AQD+/wMA/////wEA/v8CAP//AQD//wEA//8AAAEA//8BAAAA/v8EAPz/AwD+/wEAAAAAAAAA//8CAP7/AQD//wEA//8BAP//AAABAP7/AwD9/wIA//8BAP//AQD//wEA//8AAAEA/v8EAPv/BAD9/wIA//8BAP7/AwD9/wIA//8AAAEA//8BAP//AQD//wAAAQD//wEAAAD+/wMA/v8AAAIA/f8DAP7/AQD//wAAAQD+/wMA/f8CAP//AAABAP7/AgD+/wMA/f8CAP7/AQABAP7/AgD+/wIA/v8CAP7/AwD8/wMA//8AAAEA//8AAAAAAAABAP//AQD//wAAAQD//wIA/f8DAP3/AwD+/wAAAgD9/wIA//8AAAEAAAD+/wMA/P8FAPv/BAD9/wIA//8AAP//AgD+/wIA/v8BAAAAAAD//wEAAAAAAP//AQD//wEA//8BAP//AAABAP7/AwD9/wIA//8BAP//AAABAP//AQD//wAAAQD//wEA//8BAP//AAABAAAA//8BAP7/AwD9/wMA/f8DAP3/AgD//wEA//8BAP7/AgD//wAAAgD8/wQA/f8CAP//AQD+/wMA/f8CAP7/AgD//wAAAAAAAAAAAAABAP7/AwD9/wIA/v8DAP3/AwD9/wIA/v8DAPz/BQD7/wQA/f8CAP7/AwD9/wMA/f8CAP//AQAAAP7/AwD+/wEA//8AAAEAAAAAAP//AAABAP//AQAAAP7/AwD9/wMA/f8CAP//AQD//wEA//8AAAIA/f8CAAAA//8BAAAA//8BAAAA/v8EAPv/BAD9/wIA//8AAAEA/v8CAP//AAABAP//AAABAP//AAABAP7/AwD8/wQA/f8CAAAA/v8DAP3/AwD9/wMA/v8BAAAA//8BAAAA//8CAP7/AQAAAAAAAAAAAAAA//8CAP7/AgD+/wIA/v8CAP7/AgD//wAAAQD//wAAAQD//wAAAQD//wAAAQD+/wIA//8AAAAAAQD+/wMA/f8CAP//AQD//wEA//8AAAEA/v8DAP3/AgD//wAAAAABAP7/AwD9/wIA//8AAAEA/v8DAP3/AgD//wAAAAABAP7/AwD8/wMA/v8CAP//AAD//wIA/v8CAP7/AQABAP7/AQAAAP//AgD/////AQD//wEAAAD//wEA/v8EAPv/BAD9/wMA/v8BAAAA//8BAAEA/P8GAPr/BQD8/wMA/v8BAAAA//8CAP7/AQABAP3/BAD7/wYA+/8EAPz/AwD//wEA//8BAP7/BAD8/wMA/v8AAAIA/v8BAAAA//8BAAAA//8BAAAA//8CAP3/AwD+/wAAAgD8/wUA/P8DAP7/AAABAAAAAAD//wEAAAD//wIA/f8DAP7/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA/f8EAPz/AwD/////AgD+/wIA/f8DAP7/AgD+/wEA//8CAP7/AQD//wEAAAAAAP//AQAAAP//AgD9/wMA/v8BAAAA//8BAP//AQAAAP//AAACAP3/BAD7/wQA/v8BAAAA//8BAP//AQAAAP//AQAAAP7/BAD7/wUA+/8EAP3/AgD//wAAAQD+/wIA//8AAAEA/v8CAP//AQD+/wEAAAAAAAAAAAD//wEA//8CAP3/AwD9/wIA//8AAAAAAAAAAAAA//8BAP//AgD+/wEA//8CAP7/AQAAAP//AgD/////AgD/////AgD+/wIA//8AAP//AQABAP7/AgD9/wMA/v8CAP////8BAAAAAAAAAAAA//8CAP////8DAPz/AwD+/wEAAAAAAP//AQD//wEAAAD//wEAAAD+/wQA+/8FAPz/AgAAAP//AgD9/wMA/v8BAAAAAAD//wEAAAD//wIA/v8BAAAAAAD//wIA/v8BAAAA//8BAAAA//8CAP7/AQD//wEA//8BAAAA//8BAP//AAABAP//AQAAAP7/AgD//wEA//8AAAAAAQD+/wMA/P8EAP7///8DAPz/BQD8/wEAAQD+/wMA/v8AAAEA//8BAP//AQD//wEA/v8CAP//AQD//wAAAAABAAAA//8BAP//AQAAAAAA//8BAP//AgD+/wAAAQD//wIA/f8CAP//AQAAAP7/AwD9/wMA/v8BAP//AAABAP//AgD9/wIA//8BAAAA//8BAAAA//8CAP3/AwD+/wEAAAD+/wQA/P8DAP7/AAACAP7/AQAAAP//AQAAAP//AQAAAP//AgD9/wIAAAD//wIA/f8DAP7/AQD//wEA//8CAP7/AQD//wAAAQD//wEA//8AAAAAAQD//wEAAAD9/wUA+/8FAPz/AgD//wAAAQD//wAAAQD+/wMA/f8BAAEA/v8CAP7/AgD+/wIA/v8BAAAAAAAAAAAAAAD//wIA/v8CAP////8CAP7/AgD+/wIA/v8CAP7/AQAAAP//AQAAAP//AQD//wAAAQD//wAAAQD+/wMA/f8CAAAA/v8DAP3/AgAAAP//AQAAAP7/AwD9/wMA/v8BAP//AQD//wEAAAD+/wMA/f8CAAAA/v8CAP//AAAAAAEA//8AAAEA/v8DAP3/AwD9/wIA//8BAP//AgD8/wQA/v8BAAAA/v8CAP//AQD//wAAAAAAAAEA/f8EAPz/BAD9/wIA//8AAAAAAAABAP//AAAAAAAAAAABAP3/BAD9/wIA/v8BAAEA//8AAAAA//8CAP7/AgD9/wQA+/8FAPv/BQD8/wMA/f8DAP3/AwD+/wAAAgD9/wMA/f8CAAAA/v8EAPv/BQD7/wUA/P8DAP///v8DAP3/BAD8/wMA/f8DAP7/AQD//wEAAAD//wEA/v8CAAAA/v8CAP7/AgD//wAAAAAAAAAAAQD+/wIA//8AAAEA/v8DAPz/BAD9/wIA//8AAP//AgD//wEA/v8BAAAAAQD//wAAAAAAAAEA//8AAAEA//8BAP//AAABAP//AQD+/wIA/v8DAPz/BAD8/wQA/f8BAAAAAQD+/wMA/P8DAP//AAAAAAAAAAD//wMA+/8FAP3/AQABAP3/BAD8/wMA/v8BAAAA//8CAP3/AwD+/wEAAQD9/wMA/f8EAPz/BAD7/wQA/v8BAAEA/f8DAP7/AQAAAP//AgD+/wEAAAD//wIA/v8CAP7/AgD+/wEAAQD//wEA/v8CAP7/BAD7/wQA/f8CAAAA//8AAAAAAAABAP//AQD+/wEAAQD+/wMA/f8BAAEA/v8DAPz/AwD/////AwD8/wQA/P8DAP7/AgD//wAA//8BAAAAAAAAAP//AgD+/wEAAAD//wIA/v8BAAAA//8CAP3/AgD//wAAAQD+/wIA/v8BAAAA//8CAP7/AgD+/wEA//8CAP3/BAD7/wQA/v8BAAAA//8AAAEAAAD//wIA/f8DAP7/AgD+/wIA/v8CAP7/AgD+/wEAAAAAAP//AgD9/wMA/v8BAP//AgD9/wMA/v8AAAEA//8BAP//AQD//wEA//8AAAEA/v8EAPz/AgD//wAAAQAAAP//AAABAP//AQD//wEAAAD//wEA//8BAAEA/f8DAP7/AQABAP3/AwD+/wIA/////wEAAAAAAAAAAAD//wIA/v8CAP////8CAP7/AgD//wAA//8CAP3/BAD9/wAAAgD9/wMA/v8BAP//AQAAAP//AQAAAP//AgD9/wMA/f8EAPz/AwD+/wEAAAAAAAAAAAD//wIA/f8EAP3/AAABAAAA//8CAP7/AQAAAP//AQAAAAAA//8BAP//AQAAAP//AQAAAP//AQAAAP//AgD9/wMA/v8BAP//AQAAAP//AQD//wIA/v8CAP3/BAD9/wEAAAD//wEAAQD9/wMA/f8CAAAA/v8DAP3/AgD//wAAAQD+/wIA/v8CAP7/AQAAAP//AgD+/wEAAAAAAP//AwD7/wUA/f8BAAEA/v8BAAEA/v8DAP3/AgD//wEA//8BAP//AQD//wEA//8CAP3/BAD7/wQA/////wIA/v8AAAIA/v8CAP3/BAD7/wUA/P8DAP3/AwD9/wMA/v8AAAIA/v8CAP7/AgD+/wIA//8AAAEA/v8CAP7/AgD//wAAAAD//wEAAAAAAAAA//8BAP7/BAD7/wUA/P8CAAAA//8BAP//AQAAAP//AgD9/wMA/v8BAAAA//8BAAAA//8CAP3/AwD+/wEA//8CAP3/AwD+/wAAAwD8/wIAAAD//wIA/////wIA/v8CAP7/AgD+/wEAAAAAAAAAAAAAAP//AgD+/wIA//8AAAAA//8CAP7/AgD+/wEA//8CAP3/AwD9/wMA/v8BAP7/AwD9/wMA/f8CAP//AQD+/wIA//8BAP//AQD+/wMA/v8BAAAA//8BAAAA//8CAP7/AQAAAP//AgD+/wIA/v8CAP//AAAAAAEA//8BAP//AAABAAAA//8BAP//AQD//wEA//8BAP//AQAAAP//AQD//wEAAAD//wIA/f8CAAAA//8BAAAA//8BAP//AAABAP//AQD//wAAAAAAAAEA/v8CAP//AQD//wAAAAABAP7/AwD9/wIAAAD+/wIA//8BAP//AgD9/wMA/f8DAP7/AgD+/wEAAAAAAAEA/v8CAP7/AgD//wAAAAAAAAAAAAAAAP//AgD/////AgD9/wQA/f8BAAAAAAAAAAEA/f8DAP////8DAP3/AQABAP7/AgD//wAAAQD+/wMA/f8CAP7/AQABAP7/AwD7/wYA+v8FAP3/AQABAP7/AgD+/wMA/f8CAP7/AwD+/wEA//8BAP//AQAAAP7/BQD5/wcA+v8FAPz/AwD+/wIA/v8BAAAA//8DAPv/BQD8/wMA/////wEAAAAAAAAAAAD//wIA/f8DAP7/AQAAAP//AQAAAP//AgD+/wIA/v8BAAEA/f8EAPz/AwD+/wEA//8CAP7/AQD//wEA//8CAP7/AQAAAP//AgD+/wEAAAAAAAAAAAAAAAAAAAD//wIA/f8EAPz/AwD+/wEA//8CAP7/AgD+/wEAAQD+/wEAAQD+/wIA/////wIA//8AAAAAAAAAAAAAAAD//wEAAAAAAP//AgD9/wMA/v8BAP//AQAAAP//AQD//wEA//8BAP//AQD//wEA//8BAP//AQAAAP7/AwD9/wMA/v8BAP7/AwD9/wMA/v8BAP//AAABAP//AQD//wAAAAABAP//AAAAAAAAAQD//wEA/v8CAAAA/v8EAPv/BAD9/wIAAAD+/wMA/P8DAP//AAAAAP//AQD//wIA/f8DAP3/AwD9/wMA/v8BAAAA//8BAAAA//8CAP3/AwD9/wQA+/8FAPv/BQD8/wMA/v8BAAAA//8BAP//AgD+/wEAAAD//wIA/v8BAAEA/f8DAP3/AgAAAP//AQD//wAAAQD//wEA//8BAP//AQD//wEA/v8DAP3/AgAAAP7/AwD9/wIAAAD//wEAAAD//wIA/f8DAP7/AgD9/wQA+/8FAPz/AgAAAP//AgD9/wIA//8BAP//AQD//wEA//8BAP//AQD//wIA/f8DAP3/AgD//wAAAQD+/wIA/v8BAAEA/v8CAP7/AgD+/wMA/P8DAP//AAABAP7/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA/v8CAP3/BAD8/wMA/v8BAAAAAAD//wEAAAAAAAAAAAD//wEAAAAAAAAA//8BAP//AgD+/wEA//8CAP3/AwD9/wMA/f8EAPv/BAD+/wAAAQD//wEA//8BAP//AAABAP//AQD//wEAAAD//wEA//8BAP//AgD9/wMA/v8AAAIA/f8DAP7/AAACAP3/AwD+/wEA//8BAP//AQAAAP//AQAAAP7/AwD9/wMA/v8AAAEA//8BAP//AAAAAAEA//8AAAEA/v8CAP//AAAAAAEA/v8DAPz/BAD9/wEAAQD+/wEAAQD9/wQA/P8DAP7/AQAAAAAAAAAAAAAAAAAAAAAAAQD+/wIA/////wIA/v8BAAAA//8BAP//AQD//wEA//8BAAAA/v8EAPz/AwD///7/BAD8/wMA/////wIA/v8CAP////8CAP7/AgD+/wIA/v8CAP////8CAP7/AwD9/wIA/v8CAP//AAABAP7/AwD9/wEAAQD+/wMA/f8CAP//AAAAAAEA/v8DAPz/BAD9/wIA/v8CAP7/AgD//wAAAAD//wIA/v8CAP7/AQAAAAAA//8CAP7/AgD+/wIA/v8CAP7/AwD8/wUA+v8GAPv/AwD//wAAAAAAAAAA//8DAPv/BQD9/wAAAgD9/wMA/v8BAP//AQAAAP//AgD9/wMA/v8BAAAA//8BAAAAAAAAAP//AQAAAAAAAAD//wEA//8CAP3/AwD+/wAAAgD+/wEAAAD//wIA/v8CAP7/AgD/////AwD8/wUA/P8CAP//AQD//wIA/f8DAP3/AwD+/wAAAQD+/wMA/f8DAP3/AgD//wAAAQD//wEA//8BAP7/AwD+/wEA//8AAAEA//8CAPz/BAD9/wIA//8AAAEA/v8DAPz/BAD9/wIA//8AAAEA/v8CAP7/AgD//wEA/f8EAPz/BAD+////AgD//wAAAQD//wAAAQD//wEA//8BAP7/AwD+/wEA';
      }
      else {
        addTest('audiopreload', false);
        return;
      }
    }
 
    catch (e) {
      addTest('audiopreload', false);
      return;
    }
 
    elem.setAttribute('preload', 'auto');
    elem.style.cssText = 'display:none';
    docElement.appendChild(elem);
    // wait for the next tick to add the listener, otherwise the element may
    // not have time to play in high load situations (e.g. the test suite)
    setTimeout(function() {
      elem.addEventListener('loadeddata', testpreload, false);
      timeout = setTimeout(testpreload, waitTime);
    }, 0);
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/audio/webaudio.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/audio/webaudio.js

Statements: 14.29% (1 / 7)      Branches: 0% (0 / 4)      Functions: 0% (0 / 2)      Lines: 14.29% (1 / 7)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31                                    2                        
/*!
{
  "name": "Web Audio API",
  "property": "webaudio",
  "caniuse": "audio-api",
  "polyfills": ["xaudiojs", "dynamicaudiojs", "audiolibjs"],
  "tags": ["audio", "media"],
  "builderAliases": ["audio_webaudio_api"],
  "authors": ["Addy Osmani"],
  "notes": [{
    "name": "W3 Specification",
    "href": "https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html"
  }]
}
!*/
/* DOC
Detects the older non standard webaudio API, (as opposed to the standards based AudioContext API)
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('webaudio', function() {
    var prefixed = 'webkitAudioContext' in window;
    var unprefixed = 'AudioContext' in window;
 
    if (Modernizr._config.usePrefixes) {
      return prefixed || unprefixed;
    }
    return unprefixed;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/battery/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/battery/

Statements: 20% (1 / 5)      Branches: 0% (0 / 3)      Functions: 0% (0 / 2)      Lines: 20% (1 / 5)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/battery/
File Statements Branches Functions Lines
lowbattery.js 20% (1 / 5) 0% (0 / 3) 0% (0 / 2) 20% (1 / 5)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/battery/lowbattery.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/battery/lowbattery.js

Statements: 20% (1 / 5)      Branches: 0% (0 / 3)      Functions: 0% (0 / 2)      Lines: 20% (1 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25                                2                
/*!
{
  "name": "Low Battery Level",
  "property": "lowbattery",
  "tags": ["hardware", "mobile"],
  "builderAliases": ["battery_level"],
  "authors": ["Paul Sayre"],
  "notes": [{
    "name": "MDN Docs",
    "href": "https://developer.mozilla.org/en-US/docs/Web/API/Navigator/battery"
  }]
}
!*/
/* DOC
Enable a developer to remove CPU intensive CSS/JS when battery is low
*/
define(['Modernizr', 'prefixed'], function(Modernizr, prefixed) {
  Modernizr.addTest('lowbattery', function() {
    var minLevel = 0.20;
    var battery = prefixed('battery', navigator);
    return !!(battery && !battery.charging && battery.level <= minLevel);
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/canvas/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/canvas/

Statements: 11.11% (3 / 27)      Branches: 0% (0 / 10)      Functions: 0% (0 / 8)      Lines: 11.11% (3 / 27)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/canvas/
File Statements Branches Functions Lines
blending.js 12.5% (1 / 8) 0% (0 / 2) 0% (0 / 2) 12.5% (1 / 8)
todataurl.js 9.09% (1 / 11) 0% (0 / 6) 0% (0 / 4) 9.09% (1 / 11)
winding.js 12.5% (1 / 8) 0% (0 / 2) 0% (0 / 2) 12.5% (1 / 8)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/canvas/blending.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/canvas/blending.js

Statements: 12.5% (1 / 8)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 12.5% (1 / 8)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37                                      2                                  
/*!
{
  "name": "canvas blending support",
  "property": "canvasblending",
  "tags": ["canvas"],
  "async" : false,
  "notes": [{
      "name": "HTML5 Spec",
      "href": "https://dvcs.w3.org/hg/FXTF/rawfile/tip/compositing/index.html#blending"
    },
    {
      "name": "Article",
      "href": "https://blogs.adobe.com/webplatform/2013/01/28/blending-features-in-canvas"
    }]
}
!*/
/* DOC
Detects if Photoshop style blending modes are available in canvas.
*/
define(['Modernizr', 'createElement', 'test/canvas'], function(Modernizr, createElement) {
 
  Modernizr.addTest('canvasblending', function() {
    if (Modernizr.canvas === false) {
      return false;
    }
    var ctx = createElement('canvas').getContext('2d');
    // firefox 3 throws an error when setting an invalid `globalCompositeOperation`
    try {
      ctx.globalCompositeOperation = 'screen';
    } catch (e) {}
 
    return ctx.globalCompositeOperation === 'screen';
  });
 
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/canvas/todataurl.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/canvas/todataurl.js

Statements: 9.09% (1 / 11)      Branches: 0% (0 / 6)      Functions: 0% (0 / 4)      Lines: 9.09% (1 / 11)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37                          2                                              
/*!
{
  "name": "canvas.toDataURL type support",
  "property": ["todataurljpeg", "todataurlpng", "todataurlwebp"],
  "tags": ["canvas"],
  "builderAliases": ["canvas_todataurl_type"],
  "async" : false,
  "notes": [{
    "name": "MDN article",
    "href": "https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement.toDataURL"
  }]
}
!*/
define(['Modernizr', 'createElement', 'test/canvas'], function(Modernizr, createElement) {
 
  var canvas = createElement('canvas');
 
  Modernizr.addTest('todataurljpeg', function() {
    return !!Modernizr.canvas && canvas.toDataURL('image/jpeg').indexOf('data:image/jpeg') === 0;
  });
  Modernizr.addTest('todataurlpng', function() {
    return !!Modernizr.canvas && canvas.toDataURL('image/png').indexOf('data:image/png') === 0;
  });
  Modernizr.addTest('todataurlwebp', function() {
    var supports = false;
 
    // firefox 3 throws an error when you use an "invalid" toDataUrl
    try {
      supports = !!Modernizr.canvas && canvas.toDataURL('image/webp').indexOf('data:image/webp') === 0;
    } catch (e) {}
 
    return supports;
  });
 
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/canvas/winding.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/canvas/winding.js

Statements: 12.5% (1 / 8)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 12.5% (1 / 8)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31                              2                              
/*!
{
  "name": "canvas winding support",
  "property": ["canvaswinding"],
  "tags": ["canvas"],
  "async" : false,
  "notes": [{
    "name": "Article",
    "href": "https://blogs.adobe.com/webplatform/2013/01/30/winding-rules-in-canvas/"
  }]
}
!*/
/* DOC
Determines if winding rules, which controls if a path can go clockwise or counterclockwise
*/
define(['Modernizr', 'createElement', 'test/canvas'], function(Modernizr, createElement) {
 
  Modernizr.addTest('canvaswinding', function() {
    if (Modernizr.canvas === false) {
      return false;
    }
    var ctx = createElement('canvas').getContext('2d');
 
    ctx.rect(0, 0, 10, 10);
    ctx.rect(2, 2, 6, 6);
    return ctx.isPointInPath(5, 5, 'evenodd') === false;
  });
 
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/crypto/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/crypto/

Statements: 12.5% (1 / 8)      Branches: 0% (0 / 7)      Functions: 0% (0 / 1)      Lines: 12.5% (1 / 8)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/crypto/
File Statements Branches Functions Lines
getrandomvalues.js 12.5% (1 / 8) 0% (0 / 7) 0% (0 / 1) 12.5% (1 / 8)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/crypto/getrandomvalues.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/crypto/getrandomvalues.js

Statements: 12.5% (1 / 8)      Branches: 0% (0 / 7)      Functions: 0% (0 / 1)      Lines: 12.5% (1 / 8)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37                                      2                                  
/*!
{
  "name": "getRandomValues",
  "property": "getrandomvalues",
  "caniuse": "window.crypto.getRandomValues",
  "tags": ["crypto"],
  "authors": ["komachi"],
  "notes": [{
    "name": "W3C Editor’s Draft",
    "href": "https://dvcs.w3.org/hg/webcrypto-api/raw-file/tip/spec/Overview.html#RandomSource-method-getRandomValues"
  }],
  "polyfills": [
    "polycrypt"
  ]
}
!*/
/* DOC
Detects support for the window.crypto.getRandomValues for generate cryptographically secure random numbers
*/
define(['Modernizr', 'prefixed', 'is'], function(Modernizr, prefixed, is) {
  // In Safari <=5.0 `window.crypto` exists (for some reason) but is `undefined`, so we have to check
  // it’s truthy before checking for existence of `getRandomValues`
  var crypto = prefixed('crypto', window);
  var supportsGetRandomValues;
 
  // Safari 6.0 supports crypto.getRandomValues, but does not return the array,
  // which is required by the spec, so we need to actually check.
  if (crypto && 'getRandomValues' in crypto && 'Uint32Array' in window) {
    var array = new Uint32Array(10);
    var values = crypto.getRandomValues(array);
    supportsGetRandomValues = values && is(values[0], 'number');
  }
 
  Modernizr.addTest('getrandomvalues', !!supportsGetRandomValues);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/

Statements: 15.49% (81 / 523)      Branches: 0% (0 / 137)      Functions: 0% (0 / 138)      Lines: 15.55% (81 / 521)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/
File Statements Branches Functions Lines
all.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
animations.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
appearance.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
backdropfilter.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
backgroundblendmode.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
backgroundcliptext.js 33.33% (1 / 3) 100% (0 / 0) 0% (0 / 2) 33.33% (1 / 3)
backgroundposition-shorthand.js 14.29% (1 / 7) 100% (0 / 0) 0% (0 / 2) 14.29% (1 / 7)
backgroundposition-xy.js 33.33% (1 / 3) 0% (0 / 2) 0% (0 / 2) 33.33% (1 / 3)
backgroundrepeat.js 33.33% (1 / 3) 100% (0 / 0) 0% (0 / 1) 33.33% (1 / 3)
backgroundsize.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
backgroundsizecover.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
borderimage.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
borderradius.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
boxshadow.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
boxsizing.js 50% (1 / 2) 0% (0 / 3) 0% (0 / 1) 50% (1 / 2)
calc.js 14.29% (1 / 7) 100% (0 / 0) 0% (0 / 2) 14.29% (1 / 7)
checked.js 12.5% (1 / 8) 100% (0 / 0) 0% (0 / 3) 12.5% (1 / 8)
chunit.js 11.11% (1 / 9) 100% (0 / 0) 0% (0 / 2) 11.11% (1 / 9)
columns.js 5.56% (1 / 18) 0% (0 / 9) 0% (0 / 3) 5.56% (1 / 18)
cssgrid.js 33.33% (1 / 3) 100% (0 / 0) 0% (0 / 1) 33.33% (1 / 3)
cubicbezierrange.js 20% (1 / 5) 100% (0 / 0) 0% (0 / 2) 20% (1 / 5)
displayrunin.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
displaytable.js 16.67% (1 / 6) 100% (0 / 0) 0% (0 / 2) 16.67% (1 / 6)
ellipsis.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
escape.js 33.33% (1 / 3) 0% (0 / 2) 0% (0 / 1) 33.33% (1 / 3)
exunit.js 11.11% (1 / 9) 100% (0 / 0) 0% (0 / 2) 11.11% (1 / 9)
filters.js 14.29% (1 / 7) 0% (0 / 5) 0% (0 / 2) 14.29% (1 / 7)
flexbox.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
flexboxlegacy.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
flexboxtweener.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
flexwrap.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
fontface.js 7.14% (1 / 14) 0% (0 / 19) 0% (0 / 3) 7.14% (1 / 14)
generatedcontent.js 33.33% (1 / 3) 100% (0 / 0) 0% (0 / 2) 33.33% (1 / 3)
gradients.js 6.67% (1 / 15) 0% (0 / 4) 0% (0 / 2) 6.67% (1 / 15)
hairline.js 25% (1 / 4) 100% (0 / 0) 0% (0 / 3) 25% (1 / 4)
hsla.js 20% (1 / 5) 0% (0 / 2) 0% (0 / 2) 20% (1 / 5)
hyphens.js 4.9% (5 / 102) 0% (0 / 30) 0% (0 / 9) 4.95% (5 / 101)
invalid.js 14.29% (1 / 7) 100% (0 / 0) 0% (0 / 3) 14.29% (1 / 7)
lastchild.js 33.33% (1 / 3) 100% (0 / 0) 0% (0 / 2) 33.33% (1 / 3)
mask.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
mediaqueries.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
multiplebgs.js 20% (1 / 5) 100% (0 / 0) 0% (0 / 2) 20% (1 / 5)
nthchild.js 14.29% (1 / 7) 0% (0 / 2) 0% (0 / 2) 14.29% (1 / 7)
objectfit.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
opacity.js 20% (1 / 5) 100% (0 / 0) 0% (0 / 2) 20% (1 / 5)
overflow-scrolling.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
pointerevents.js 20% (1 / 5) 100% (0 / 0) 0% (0 / 2) 20% (1 / 5)
positionsticky.js 12.5% (1 / 8) 100% (0 / 0) 0% (0 / 2) 12.5% (1 / 8)
pseudoanimations.js 11.11% (1 / 9) 0% (0 / 4) 0% (0 / 3) 11.11% (1 / 9)
pseudotransitions.js 9.09% (1 / 11) 0% (0 / 4) 0% (0 / 3) 9.09% (1 / 11)
reflections.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
regions.js 2.7% (1 / 37) 0% (0 / 13) 0% (0 / 2) 2.7% (1 / 37)
remunit.js 16.67% (1 / 6) 100% (0 / 0) 0% (0 / 2) 16.67% (1 / 6)
resize.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
rgba.js 20% (1 / 5) 100% (0 / 0) 0% (0 / 2) 20% (1 / 5)
scrollbars.js 33.33% (1 / 3) 0% (0 / 2) 0% (0 / 2) 33.33% (1 / 3)
scrollsnappoints.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
shapes.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
siblinggeneral.js 25% (1 / 4) 100% (0 / 0) 0% (0 / 3) 25% (1 / 4)
subpixelfont.js 20% (1 / 5) 0% (0 / 2) 0% (0 / 2) 20% (1 / 5)
supports.js 25% (1 / 4) 0% (0 / 4) 0% (0 / 1) 25% (1 / 4)
target.js 11.11% (1 / 9) 0% (0 / 2) 0% (0 / 2) 11.11% (1 / 9)
textalignlast.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
textshadow.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
transforms.js 33.33% (1 / 3) 0% (0 / 2) 0% (0 / 2) 33.33% (1 / 3)
transforms3d.js 6.25% (1 / 16) 0% (0 / 11) 0% (0 / 3) 6.25% (1 / 16)
transformslevel2.js 33.33% (1 / 3) 100% (0 / 0) 0% (0 / 2) 33.33% (1 / 3)
transformstylepreserve3d.js 5.88% (1 / 17) 0% (0 / 7) 0% (0 / 2) 5.88% (1 / 17)
transitions.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
userselect.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
valid.js 16.67% (1 / 6) 100% (0 / 0) 0% (0 / 3) 16.67% (1 / 6)
vhunit.js 20% (1 / 5) 100% (0 / 0) 0% (0 / 2) 20% (1 / 5)
vmaxunit.js 9.09% (1 / 11) 0% (0 / 2) 0% (0 / 2) 9.09% (1 / 11)
vminunit.js 9.09% (1 / 11) 0% (0 / 2) 0% (0 / 2) 9.09% (1 / 11)
vwunit.js 20% (1 / 5) 100% (0 / 0) 0% (0 / 2) 20% (1 / 5)
will-change.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
wrapflow.js 5.26% (1 / 19) 0% (0 / 4) 0% (0 / 3) 5.56% (1 / 18)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/all.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/all.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19                            2        
/*!
{
  "name": "cssall",
  "property": "cssall",
  "notes": [{
    "name": "Spec",
    "href": "https://drafts.csswg.org/css-cascade/#all-shorthand"
  }]
}
!*/
/* DOC
Detects support for the `all` css property, which is a shorthand to reset all css properties (except direction and unicode-bidi) to their original value
*/
 
define(['Modernizr', 'docElement'], function(Modernizr, docElement) {
  Modernizr.addTest('cssall', 'all' in docElement.style);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/animations.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/animations.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22                                  2        
/*!
{
  "name": "CSS Animations",
  "property": "cssanimations",
  "caniuse": "css-animation",
  "polyfills": ["transformie", "csssandpaper"],
  "tags": ["css"],
  "warnings": ["Android < 4 will pass this test, but can only animate a single property at a time"],
  "notes": [{
    "name" : "Article: 'Dispelling the Android CSS animation myths'",
    "href": "https://goo.gl/OGw5Gm"
  }]
}
!*/
/* DOC
Detects whether or not elements can be animated using CSS
*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('cssanimations', testAllProps('animationName', 'a', true));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/appearance.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/appearance.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25                                        2        
/*!
{
  "name": "Appearance",
  "property": "appearance",
  "caniuse": "css-appearance",
  "tags": ["css"],
  "notes": [{
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en-US/docs/Web/CSS/-moz-appearance"
  },{
    "name": "CSS-Tricks CSS Almanac: appearance",
    "href": "https://css-tricks.com/almanac/properties/a/appearance/"
  }]
}
!*/
/* DOC
Detects support for the `appearance` css property, which is used to make an
element inherit the style of a standard user interface element. It can also be
used to remove the default styles of an element, such as input and buttons.
*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('appearance', testAllProps('appearance'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/backdropfilter.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/backdropfilter.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30                                                  2        
/*!
{
  "name": "Backdrop Filter",
  "property": "backdropfilter",
  "authors": ["Brian Seward"],
  "tags": ["css"],
  "notes": [
    {
      "name": "W3C Editor’s Draft specification",
      "href": "https://drafts.fxtf.org/filters-2/#BackdropFilterProperty"
    },
    {
      "name": "Caniuse for CSS Backdrop Filter",
      "href": "http://caniuse.com/#feat=css-backdrop-filter"
    },
    {
      "name": "WebKit Blog introduction + Demo",
      "href": "https://www.webkit.org/blog/3632/introducing-backdrop-filters/"
    }
  ]
}
!*/
/* DOC
Detects support for CSS Backdrop Filters, allowing for background blur effects like those introduced in iOS 7. Support for this was added to iOS Safari/WebKit in iOS 9.
*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('backdropfilter', testAllProps('backdropFilter'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/backgroundblendmode.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/backgroundblendmode.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25                                        2        
/*!
{
  "name": "CSS Background Blend Mode",
  "property": "backgroundblendmode",
  "caniuse": "css-backgroundblendmode",
  "tags": ["css"],
  "notes": [
    {
      "name": "CSS Blend Modes could be the next big thing in Web Design",
      "href": " https://medium.com/@bennettfeely/css-blend-modes-could-be-the-next-big-thing-in-web-design-6b51bf53743a"
    }, {
      "name": "Demo",
      "href": "http://bennettfeely.com/gradients/"
    }
  ]
}
!*/
/* DOC
Detects the ability for the browser to composite backgrounds using blending modes similar to ones found in Photoshop or Illustrator.
*/
define(['Modernizr', 'prefixed'], function(Modernizr, prefixed) {
  Modernizr.addTest('backgroundblendmode', prefixed('backgroundBlendMode', 'text'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/backgroundcliptext.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/backgroundcliptext.js

Statements: 33.33% (1 / 3)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33                                                    2            
/*!
{
  "name": "CSS Background Clip Text",
  "property": "backgroundcliptext",
  "authors": ["ausi"],
  "tags": ["css"],
  "notes": [
    {
      "name": "CSS Tricks Article",
      "href": "https://css-tricks.com/image-under-text/"
    },
    {
      "name": "MDN Docs",
      "href": "https://developer.mozilla.org/en-US/docs/Web/CSS/background-clip"
    },
    {
      "name": "Related Github Issue",
      "href": "https://github.com/Modernizr/Modernizr/issues/199"
    }
  ]
}
!*/
/* DOC
Detects the ability to control specifies whether or not an element's background
extends beyond its border in CSS
*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('backgroundcliptext', function() {
    return testAllProps('backgroundClip', 'text');
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/backgroundposition-shorthand.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/backgroundposition-shorthand.js

Statements: 14.29% (1 / 7)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 14.29% (1 / 7)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35                                                2                    
/*!
{
  "name": "Background Position Shorthand",
  "property": "bgpositionshorthand",
  "tags": ["css"],
  "builderAliases": ["css_backgroundposition_shorthand"],
  "notes": [{
    "name": "MDN Docs",
    "href": "https://developer.mozilla.org/en/CSS/background-position"
  }, {
    "name": "W3 Spec",
    "href": "https://www.w3.org/TR/css3-background/#background-position"
  }, {
    "name": "Demo",
    "href": "https://jsfiddle.net/Blink/bBXvt/"
  }]
}
!*/
/* DOC
Detects if you can use the shorthand method to define multiple parts of an
element's background-position simultaniously.
 
eg `background-position: right 10px bottom 10px`
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('bgpositionshorthand', function() {
    var elem = createElement('a');
    var eStyle = elem.style;
    var val = 'right 10px bottom 10px';
    eStyle.cssText = 'background-position: ' + val + ';';
    return (eStyle.backgroundPosition === val);
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/backgroundposition-xy.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/backgroundposition-xy.js

Statements: 33.33% (1 / 3)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26                                      2            
/*!
{
  "name": "Background Position XY",
  "property": "bgpositionxy",
  "tags": ["css"],
  "builderAliases": ["css_backgroundposition_xy"],
  "authors": ["Allan Lei", "Brandom Aaron"],
  "notes": [{
    "name": "Demo",
    "href": "https://jsfiddle.net/allanlei/R8AYS/"
  }, {
    "name": "Adapted From",
    "href": "https://github.com/brandonaaron/jquery-cssHooks/blob/master/bgpos.js"
  }]
}
!*/
/* DOC
Detects the ability to control an element's background position using css
*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('bgpositionxy', function() {
    return testAllProps('backgroundPositionX', '3px', true) && testAllProps('backgroundPositionY', '5px', true);
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/backgroundrepeat.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/backgroundrepeat.js

Statements: 33.33% (1 / 3)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29                                            2            
/*!
{
  "name": "Background Repeat",
  "property": ["bgrepeatspace", "bgrepeatround"],
  "tags": ["css"],
  "builderAliases": ["css_backgroundrepeat"],
  "authors": ["Ryan Seddon"],
  "notes": [{
    "name": "MDN Docs",
    "href": "https://developer.mozilla.org/en-US/docs/Web/CSS/background-repeat"
  }, {
    "name": "Test Page",
    "href": "https://jsbin.com/uzesun/"
  }, {
    "name": "Demo",
    "href": "https://jsfiddle.net/ryanseddon/yMLTQ/6/"
  }]
}
!*/
/* DOC
Detects the ability to use round and space as properties for background-repeat
*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  // Must value-test these
  Modernizr.addTest('bgrepeatround', testAllProps('backgroundRepeat', 'round'));
  Modernizr.addTest('bgrepeatspace', testAllProps('backgroundRepeat', 'space'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/backgroundsize.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/backgroundsize.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17                        2        
/*!
{
  "name": "Background Size",
  "property": "backgroundsize",
  "tags": ["css"],
  "knownBugs": ["This will false positive in Opera Mini - https://github.com/Modernizr/Modernizr/issues/396"],
  "notes": [{
    "name": "Related Issue",
    "href": "https://github.com/Modernizr/Modernizr/issues/396"
  }]
}
!*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('backgroundsize', testAllProps('backgroundSize', '100%', true));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/backgroundsizecover.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/backgroundsizecover.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18                        2          
/*!
{
  "name": "Background Size Cover",
  "property": "bgsizecover",
  "tags": ["css"],
  "builderAliases": ["css_backgroundsizecover"],
  "notes": [{
    "name" : "MDN Docs",
    "href": "https://developer.mozilla.org/en/CSS/background-size"
  }]
}
!*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  // Must test value, as this specifically tests the `cover` value
  Modernizr.addTest('bgsizecover', testAllProps('backgroundSize', 'cover'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/borderimage.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/borderimage.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15                    2        
/*!
{
  "name": "Border Image",
  "property": "borderimage",
  "caniuse": "border-image",
  "polyfills": ["css3pie"],
   "knownBugs": ["Android < 2.0 is true, but has a broken implementation"],
  "tags": ["css"]
}
!*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('borderimage', testAllProps('borderImage', 'url() 1', true));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/borderradius.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/borderradius.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18                          2        
/*!
{
  "name": "Border Radius",
  "property": "borderradius",
  "caniuse": "border-radius",
  "polyfills": ["css3pie"],
  "tags": ["css"],
  "notes": [{
    "name": "Comprehensive Compat Chart",
    "href": "https://muddledramblings.com/table-of-css3-border-radius-compliance"
  }]
}
!*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('borderradius', testAllProps('borderRadius', '0px', true));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/boxshadow.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/boxshadow.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17                        2        
/*!
{
  "name": "Box Shadow",
  "property": "boxshadow",
  "caniuse": "css-boxshadow",
  "tags": ["css"],
  "knownBugs": [
    "WebOS false positives on this test.",
    "The Kindle Silk browser false positives"
  ]
}
!*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('boxshadow', testAllProps('boxShadow', '1px 1px', true));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/boxsizing.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/boxsizing.js

Statements: 50% (1 / 2)      Branches: 0% (0 / 3)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22                                  2        
/*!
{
  "name": "Box Sizing",
  "property": "boxsizing",
  "caniuse": "css3-boxsizing",
  "polyfills": ["borderboxmodel", "boxsizingpolyfill", "borderbox"],
  "tags": ["css"],
  "builderAliases": ["css_boxsizing"],
  "notes": [{
    "name": "MDN Docs",
    "href": "https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing"
  },{
    "name": "Related Github Issue",
    "href": "https://github.com/Modernizr/Modernizr/issues/248"
  }]
}
!*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('boxsizing', testAllProps('boxSizing', 'border-box', true) && (document.documentMode === undefined || document.documentMode > 7));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/calc.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/calc.js

Statements: 14.29% (1 / 7)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 14.29% (1 / 7)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32                                      2                        
/*!
{
  "name": "CSS Calc",
  "property": "csscalc",
  "caniuse": "calc",
  "tags": ["css"],
  "builderAliases": ["css_calc"],
  "authors": ["@calvein"]
}
!*/
/* DOC
Method of allowing calculated values for length units. For example:
 
```css
//lem {
  width: calc(100% - 3em);
}
```
*/
define(['Modernizr', 'createElement', 'prefixes'], function(Modernizr, createElement, prefixes) {
  Modernizr.addTest('csscalc', function() {
    var prop = 'width:';
    var value = 'calc(10px);';
    var el = createElement('a');
 
    el.style.cssText = prop + prefixes.join(value + prop);
 
    return !!el.style.length;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/checked.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/checked.js

Statements: 12.5% (1 / 8)      Branches: 100% (0 / 0)      Functions: 0% (0 / 3)      Lines: 12.5% (1 / 8)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25                        2                        
/*!
{
  "name": "CSS :checked pseudo-selector",
  "caniuse": "css-sel3",
  "property": "checked",
  "tags": ["css"],
  "notes": [{
    "name": "Related Github Issue",
    "href": "https://github.com/Modernizr/Modernizr/pull/879"
  }]
}
!*/
define(['Modernizr', 'createElement', 'testStyles'], function(Modernizr, createElement, testStyles) {
  Modernizr.addTest('checked', function() {
    return testStyles('#modernizr {position:absolute} #modernizr input {margin-left:10px} #modernizr :checked {margin-left:20px;display:block}', function(elem) {
      var cb = createElement('input');
      cb.setAttribute('type', 'checkbox');
      cb.setAttribute('checked', 'checked');
      elem.appendChild(cb);
      return cb.offsetLeft === 20;
    });
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/chunit.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/chunit.js

Statements: 11.11% (1 / 9)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 11.11% (1 / 9)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27                        2                            
/*!
{
  "name": "CSS Font ch Units",
  "authors": ["Ron Waldon (@jokeyrhyme)"],
  "property": "csschunit",
  "tags": ["css"],
  "notes": [{
    "name": "W3C Spec",
    "href": "https://www.w3.org/TR/css3-values/#font-relative-lengths"
  }]
}
!*/
define(['Modernizr', 'modElem'], function(Modernizr, modElem) {
  Modernizr.addTest('csschunit', function() {
    var elemStyle = modElem.elem.style;
    var supports;
    try {
      elemStyle.fontSize = '3ch';
      supports = elemStyle.fontSize.indexOf('ch') !== -1;
    } catch (e) {
      supports = false;
    }
    return supports;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/columns.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/columns.js

Statements: 5.56% (1 / 18)      Branches: 0% (0 / 9)      Functions: 0% (0 / 3)      Lines: 5.56% (1 / 18)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47                  2                                                                          
/*!
{
  "name": "CSS Columns",
  "property": "csscolumns",
  "caniuse": "multicolumn",
  "polyfills": ["css3multicolumnjs"],
  "tags": ["css"]
}
!*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
 
  (function() {
 
    Modernizr.addTest('csscolumns', function() {
      var bool = false;
      var test = testAllProps('columnCount');
      try {
        bool = !!test
        if (bool) {
          bool = new Boolean(bool);
        }
      } catch (e) {}
 
      return bool;
    });
 
    var props = ['Width', 'Span', 'Fill', 'Gap', 'Rule', 'RuleColor', 'RuleStyle', 'RuleWidth', 'BreakBefore', 'BreakAfter', 'BreakInside'];
    var name, test;
 
    for (var i = 0; i < props.length; i++) {
      name = props[i].toLowerCase();
      test = testAllProps('column' + props[i]);
 
      // break-before, break-after & break-inside are not "column"-prefixed in spec
      if (name === 'breakbefore' || name === 'breakafter' || name == 'breakinside') {
        test = test || testAllProps(props[i]);
      }
 
      Modernizr.addTest('csscolumns.' + name, test);
    }
 
 
  })();
 
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/cssgrid.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/cssgrid.js

Statements: 33.33% (1 / 3)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22                              2            
/*!
{
  "name": "CSS Grid (old & new)",
  "property": ["cssgrid", "cssgridlegacy"],
  "authors": ["Faruk Ates"],
  "tags": ["css"],
  "notes": [{
    "name": "The new, standardized CSS Grid",
    "href": "https://www.w3.org/TR/css3-grid-layout/"
  }, {
    "name": "The _old_ CSS Grid (legacy)",
    "href": "https://www.w3.org/TR/2011/WD-css3-grid-layout-20110407/"
  }]
}
!*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  // `grid-columns` is only in the old syntax, `grid-column` exists in both and so `grid-template-rows` is used for the new syntax.
  Modernizr.addTest('cssgridlegacy', testAllProps('grid-columns', '10px', true));
  Modernizr.addTest('cssgrid', testAllProps('grid-template-rows', 'none', true));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/cubicbezierrange.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/cubicbezierrange.js

Statements: 20% (1 / 5)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 20% (1 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24                              2                
/*!
{
  "name": "CSS Cubic Bezier Range",
  "property": "cubicbezierrange",
  "tags": ["css"],
  "builderAliases": ["css_cubicbezierrange"],
  "doc" : null,
  "authors": ["@calvein"],
  "warnings": ["cubic-bezier values can't be > 1 for Webkit until [bug #45761](https://bugs.webkit.org/show_bug.cgi?id=45761) is fixed"],
  "notes": [{
    "name": "Comprehensive Compat Chart",
    "href": "http://muddledramblings.com/table-of-css3-border-radius-compliance"
  }]
}
!*/
define(['Modernizr', 'createElement', 'prefixes'], function(Modernizr, createElement, prefixes) {
  Modernizr.addTest('cubicbezierrange', function() {
    var el = createElement('a');
    el.style.cssText = prefixes.join('transition-timing-function:cubic-bezier(1,0,0,1.1); ');
    return !!el.style.length;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/displayrunin.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/displayrunin.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22                                2          
/*!
{
  "name": "CSS Display run-in",
  "property": "display-runin",
  "authors": ["alanhogan"],
  "tags": ["css"],
  "builderAliases": ["css_displayrunin"],
  "notes": [{
    "name": "CSS Tricks Article",
    "href": "https://css-tricks.com/596-run-in/"
  },{
    "name": "Related Github Issue",
    "href": "https://github.com/Modernizr/Modernizr/issues/198"
  }]
}
!*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('displayrunin', testAllProps('display', 'run-in'),
    {aliases: ['display-runin']});
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/displaytable.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/displaytable.js

Statements: 16.67% (1 / 6)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 16.67% (1 / 6)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29                                  2                      
/*!
{
  "name": "CSS Display table",
  "property": "displaytable",
  "caniuse": "css-table",
  "authors": ["scottjehl"],
  "tags": ["css"],
  "builderAliases": ["css_displaytable"],
  "notes": [{
    "name": "Detects for all additional table display values",
    "href": "http://pastebin.com/Gk9PeVaQ"
  }]
}
!*/
/* DOC
`display: table` and `table-cell` test. (both are tested under one name `table-cell` )
*/
define(['Modernizr', 'testStyles'], function(Modernizr, testStyles) {
  // If a document is in rtl mode this test will fail so we force ltr mode on the injeced
  // element https://github.com/Modernizr/Modernizr/issues/716
  testStyles('#modernizr{display: table; direction: ltr}#modernizr div{display: table-cell; padding: 10px}', function(elem) {
    var ret;
    var child = elem.childNodes;
    ret = child[0].offsetLeft < child[1].offsetLeft;
    Modernizr.addTest('displaytable', ret, {aliases: ['display-table']});
  }, 2);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/ellipsis.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/ellipsis.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16                      2        
/*!
{
  "name": "CSS text-overflow ellipsis",
  "property": "ellipsis",
  "caniuse": "text-overflow",
  "polyfills": [
    "text-overflow"
  ],
  "tags": ["css"]
}
!*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('ellipsis', testAllProps('textOverflow', 'ellipsis'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/escape.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/escape.js

Statements: 33.33% (1 / 3)      Branches: 0% (0 / 2)      Functions: 0% (0 / 1)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22                                2          
/*!
{
  "name": "CSS.escape()",
  "property": "cssescape",
  "polyfills": [
    "css-escape"
  ],
  "tags": [
    "css",
    "cssom"
  ]
}
!*/
/* DOC
Tests for `CSS.escape()` support.
*/
define(['Modernizr'], function(Modernizr) {
  var CSS = window.CSS;
  Modernizr.addTest('cssescape', CSS ? typeof CSS.escape == 'function' : false);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/exunit.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/exunit.js

Statements: 11.11% (1 / 9)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 11.11% (1 / 9)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27                        2                            
/*!
{
  "name": "CSS Font ex Units",
  "authors": ["Ron Waldon (@jokeyrhyme)"],
  "property": "cssexunit",
  "tags": ["css"],
  "notes": [{
    "name": "W3C Spec",
    "href": "https://www.w3.org/TR/css3-values/#font-relative-lengths"
  }]
}
!*/
define(['Modernizr', 'modElem'], function(Modernizr, modElem) {
  Modernizr.addTest('cssexunit', function() {
    var elemStyle = modElem.elem.style;
    var supports;
    try {
      elemStyle.fontSize = '3ex';
      supports = elemStyle.fontSize.indexOf('ex') !== -1;
    } catch (e) {
      supports = false;
    }
    return supports;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/filters.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/filters.js

Statements: 14.29% (1 / 7)      Branches: 0% (0 / 5)      Functions: 0% (0 / 2)      Lines: 14.29% (1 / 7)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30                            2                              
/*!
{
  "name": "CSS Filters",
  "property": "cssfilters",
  "caniuse": "css-filters",
  "polyfills": ["polyfilter"],
  "tags": ["css"],
  "builderAliases": ["css_filters"],
  "notes": [{
    "name": "MDN article on CSS filters",
    "href": "https://developer.mozilla.org/en-US/docs/Web/CSS/filter"
  }]
}
!*/
define(['Modernizr', 'createElement', 'prefixes', 'testAllProps', 'test/css/supports'], function(Modernizr, createElement, prefixes, testAllProps) {
  Modernizr.addTest('cssfilters', function() {
    if (Modernizr.supports) {
      return testAllProps('filter', 'blur(2px)');
    } else {
      var el = createElement('a');
      el.style.cssText = prefixes.join('filter:blur(2px); ');
      // https://github.com/Modernizr/Modernizr/issues/615
      // documentMode is needed for false positives in oldIE, please see issue above
      return !!el.style.length && ((document.documentMode === undefined || document.documentMode > 9));
    }
  });
 
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/flexbox.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/flexbox.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23                                    2        
/*!
{
  "name": "Flexbox",
  "property": "flexbox",
  "caniuse": "flexbox",
  "tags": ["css"],
  "notes": [{
    "name": "The _new_ flexbox",
    "href": "http://dev.w3.org/csswg/css3-flexbox"
  }],
  "warnings": [
    "A `true` result for this detect does not imply that the `flex-wrap` property is supported; see the `flexwrap` detect."
  ]
}
!*/
/* DOC
Detects support for the Flexible Box Layout model, a.k.a. Flexbox, which allows easy manipulation of layout order and sizing within a container.
*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('flexbox', testAllProps('flexBasis', '1px', true));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/flexboxlegacy.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/flexboxlegacy.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17                        2        
/*!
{
  "name": "Flexbox (legacy)",
  "property": "flexboxlegacy",
  "tags": ["css"],
  "polyfills": ["flexie"],
  "notes": [{
    "name": "The _old_ flexbox",
    "href": "https://www.w3.org/TR/2009/WD-css3-flexbox-20090723/"
  }]
}
!*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('flexboxlegacy', testAllProps('boxDirection', 'reverse', true));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/flexboxtweener.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/flexboxtweener.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18                          2        
/*!
{
  "name": "Flexbox (tweener)",
  "property": "flexboxtweener",
  "tags": ["css"],
  "polyfills": ["flexie"],
  "notes": [{
    "name": "The _inbetween_ flexbox",
    "href": "https://www.w3.org/TR/2011/WD-css3-flexbox-20111129/"
  }],
  "warnings": ["This represents an old syntax, not the latest standard syntax."]
}
!*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('flexboxtweener', testAllProps('flexAlign', 'end', true));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/flexwrap.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/flexwrap.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33                                                        2        
/*!
{
  "name": "Flex Line Wrapping",
  "property": "flexwrap",
  "tags": ["css", "flexbox"],
  "notes": [{
    "name": "W3C Flexible Box Layout spec",
    "href": "http://dev.w3.org/csswg/css3-flexbox"
  }],
  "warnings": [
    "Does not imply a modern implementation – see documentation."
  ]
}
!*/
/* DOC
Detects support for the `flex-wrap` CSS property, part of Flexbox, which isn’t present in all Flexbox implementations (notably Firefox).
 
This featured in both the 'tweener' syntax (implemented by IE10) and the 'modern' syntax (implemented by others). This detect will return `true` for either of these implementations, as long as the `flex-wrap` property is supported. So to ensure the modern syntax is supported, use together with `Modernizr.flexbox`:
 
```javascript
if (Modernizr.flexbox && Modernizr.flexwrap) {
  // Modern Flexbox with `flex-wrap` supported
}
else {
  // Either old Flexbox syntax, or `flex-wrap` not supported
}
```
*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('flexwrap', testAllProps('flexWrap', 'wrap', true));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/fontface.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/fontface.js

Statements: 7.14% (1 / 14)      Branches: 0% (0 / 19)      Functions: 0% (0 / 3)      Lines: 7.14% (1 / 14)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49                                                        2                                        
/*!
{
  "name": "@font-face",
  "property": "fontface",
  "authors": ["Diego Perini", "Mat Marquis"],
  "tags": ["css"],
  "knownBugs": [
    "False Positive: WebOS https://github.com/Modernizr/Modernizr/issues/342",
    "False Postive: WP7 https://github.com/Modernizr/Modernizr/issues/538"
  ],
  "notes": [{
    "name": "@font-face detection routine by Diego Perini",
    "href": "http://javascript.nwbox.com/CSSSupport/"
  },{
    "name": "Filament Group @font-face compatibility research",
    "href": "https://docs.google.com/presentation/d/1n4NyG4uPRjAA8zn_pSQ_Ket0RhcWC6QlZ6LMjKeECo0/edit#slide=id.p"
  },{
    "name": "Filament Grunticon/@font-face device testing results",
    "href": "https://docs.google.com/spreadsheet/ccc?key=0Ag5_yGvxpINRdHFYeUJPNnZMWUZKR2ItMEpRTXZPdUE#gid=0"
  },{
    "name": "CSS fonts on Android",
    "href": "https://stackoverflow.com/questions/3200069/css-fonts-on-android"
  },{
    "name": "@font-face and Android",
    "href": "http://archivist.incutio.com/viewlist/css-discuss/115960"
  }]
}
!*/
define(['Modernizr', 'testStyles'], function(Modernizr, testStyles) {
  var blacklist = (function() {
    var ua = navigator.userAgent;
    var webos = ua.match(/w(eb)?osbrowser/gi);
    var wppre8 = ua.match(/windows phone/gi) && ua.match(/iemobile\/([0-9])+/gi) && parseFloat(RegExp.$1) >= 9;
    return webos || wppre8;
  }());
  if (blacklist) {
    Modernizr.addTest('fontface', false);
  } else {
    testStyles('@font-face {font-family:"font";src:url("https://")}', function(node, rule) {
      var style = document.getElementById('smodernizr');
      var sheet = style.sheet || style.styleSheet;
      var cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : '';
      var bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0;
      Modernizr.addTest('fontface', bool);
    });
  }
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/generatedcontent.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/generatedcontent.js

Statements: 33.33% (1 / 3)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26                                    2              
/*!
{
  "name": "CSS Generated Content",
  "property": "generatedcontent",
  "tags": ["css"],
  "warnings": ["Android won't return correct height for anything below 7px #738"],
  "notes": [{
    "name": "W3C CSS Selectors Level 3 spec",
    "href": "https://www.w3.org/TR/css3-selectors/#gen-content"
  },{
    "name": "MDN article on :before",
    "href": "https://developer.mozilla.org/en-US/docs/Web/CSS/::before"
  },{
    "name": "MDN article on :after",
    "href": "https://developer.mozilla.org/en-US/docs/Web/CSS/::before"
  }]
}
!*/
define(['Modernizr', 'testStyles'], function(Modernizr, testStyles) {
  testStyles('#modernizr{font:0/0 a}#modernizr:after{content:":)";visibility:hidden;font:7px/1 a}', function(node) {
    // See bug report on why this value is 6 crbug.com/608142
    Modernizr.addTest('generatedcontent', node.offsetHeight >= 6);
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/gradients.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/gradients.js

Statements: 6.67% (1 / 15)      Branches: 0% (0 / 4)      Functions: 0% (0 / 2)      Lines: 6.67% (1 / 15)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48                                      2                                                        
/*!
{
  "name": "CSS Gradients",
  "caniuse": "css-gradients",
  "property": "cssgradients",
  "tags": ["css"],
  "knownBugs": ["False-positives on webOS (https://github.com/Modernizr/Modernizr/issues/202)"],
  "notes": [{
    "name": "Webkit Gradient Syntax",
    "href": "https://webkit.org/blog/175/introducing-css-gradients/"
  },{
    "name": "Linear Gradient Syntax",
    "href": "https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient"
  },{
    "name": "W3C Gradient Spec",
    "href": "https://drafts.csswg.org/css-images-3/#gradients"
  }]
}
!*/
define(['Modernizr', 'prefixes', 'createElement'], function(Modernizr, prefixes, createElement) {
 
  Modernizr.addTest('cssgradients', function() {
 
    var str1 = 'background-image:';
    var str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));';
    var css = '';
    var angle;
 
    for (var i = 0, len = prefixes.length - 1; i < len; i++) {
      angle = (i === 0 ? 'to ' : '');
      css += str1 + prefixes[i] + 'linear-gradient(' + angle + 'left top, #9f9, white);';
    }
 
    if (Modernizr._config.usePrefixes) {
    // legacy webkit syntax (FIXME: remove when syntax not in use anymore)
      css += str1 + '-webkit-' + str2;
    }
 
    var elem = createElement('a');
    var style = elem.style;
    style.cssText = css;
 
    // IE6 returns undefined so cast to string
    return ('' + style.backgroundImage).indexOf('gradient') > -1;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/hairline.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/hairline.js

Statements: 25% (1 / 4)      Branches: 100% (0 / 0)      Functions: 0% (0 / 3)      Lines: 25% (1 / 4)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27                                    2                
/*! {
  "name": "hairline",
  "property": "hairline",
  "tags": ["css"],
  "authors": ["strarsis"],
  "notes": [{
    "name": "Blog post about CSS retina hairlines",
    "href": "http://dieulot.net/css-retina-hairline"
  },{
    "name": "Derived from",
    "href": "https://gist.github.com/dieulot/520a49463f6058fbc8d1"
  }]
}
!*/
/* DOC
Detects support for hidpi/retina hairlines, which are CSS borders with less than 1px in width, for being physically 1px on hidpi screens.
*/
 
define(['Modernizr', 'testStyles'], function(Modernizr, testStyles) {
  Modernizr.addTest('hairline', function() {
    return testStyles('#modernizr {border:.5px solid transparent}', function(elem) {
      return elem.offsetHeight === 1;
    });
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/hsla.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/hsla.js

Statements: 20% (1 / 5)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 20% (1 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17                2                
/*!
{
  "name": "CSS HSLA Colors",
  "caniuse": "css3-colors",
  "property": "hsla",
  "tags": ["css"]
}
!*/
define(['Modernizr', 'createElement', 'contains'], function(Modernizr, createElement, contains) {
  Modernizr.addTest('hsla', function() {
    var style = createElement('a').style;
    style.cssText = 'background-color:hsla(120,40%,100%,.5)';
    return contains(style.backgroundColor, 'rgba') || contains(style.backgroundColor, 'hsla');
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/hyphens.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/hyphens.js

Statements: 4.9% (5 / 102)      Branches: 0% (0 / 30)      Functions: 0% (0 / 9)      Lines: 4.95% (5 / 101)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225                                                          2           1             1                                                                               1                                                                                                       1                                                                                                                                                                                    
/*!
{
  "name": "CSS Hyphens",
  "caniuse": "css-hyphens",
  "property": ["csshyphens", "softhyphens", "softhyphensfind"],
  "tags": ["css"],
  "builderAliases": ["css_hyphens"],
  "async" : true,
  "authors": ["David Newton"],
  "warnings": [
    "These tests currently require document.body to be present",
    "If loading Hyphenator.js via yepnope, be cautious of issue 158: http://code.google.com/p/hyphenator/issues/detail?id=158",
    "This is very large – only include it if you absolutely need it"
    ],
  "notes": [{
    "name": "The Current State of Hyphenation on the Web.",
    "href": "http://davidnewton.ca/the-current-state-of-hyphenation-on-the-web"
  },{
    "name": "Hyphenation Test Page",
    "href": "http://davidnewton.ca/demos/hyphenation/test.html"
  },{
    "name": "Hyphenation is Language Specific",
    "href": " http://code.google.com/p/hyphenator/source/diff?spec=svn975&r=975&format=side&path=/trunk/Hyphenator.js#sc_svn975_313"
  },{
    "name": "Related Modernizr Issue",
    "href": "https://github.com/Modernizr/Modernizr/issues/312"
  }]
}
!*/
define(['Modernizr', 'prefixes', 'createElement', 'testAllProps', 'addTest'], function(Modernizr, prefixes, createElement, testAllProps, addTest) {
 
  Modernizr.addAsyncTest(function() {
    var waitTime = 300;
    setTimeout(runHyphenTest, waitTime);
    // Wait 1000ms so we can hope for document.body
    function runHyphenTest() {
      if (!document.body && !document.getElementsByTagName('body')[0]) {
        setTimeout(runHyphenTest, waitTime);
        return;
      }
 
      // functional test of adding hyphens:auto
      function test_hyphens_css() {
        try {
          /* create a div container and a span within that
           * these have to be appended to document.body, otherwise some browsers can give false negative */
          var div = createElement('div');
          var span = createElement('span');
          var divStyle = div.style;
          var spanHeight = 0;
          var spanWidth = 0;
          var result = false;
          var firstChild = document.body.firstElementChild || document.body.firstChild;
 
          div.appendChild(span);
          span.innerHTML = 'Bacon ipsum dolor sit amet jerky velit in culpa hamburger et. Laborum dolor proident, enim dolore duis commodo et strip steak. Salami anim et, veniam consectetur dolore qui tenderloin jowl velit sirloin. Et ad culpa, fatback cillum jowl ball tip ham hock nulla short ribs pariatur aute. Pig pancetta ham bresaola, ut boudin nostrud commodo flank esse cow tongue culpa. Pork belly bresaola enim pig, ea consectetur nisi. Fugiat officia turkey, ea cow jowl pariatur ullamco proident do laborum velit sausage. Magna biltong sint tri-tip commodo sed bacon, esse proident aliquip. Ullamco ham sint fugiat, velit in enim sed mollit nulla cow ut adipisicing nostrud consectetur. Proident dolore beef ribs, laborum nostrud meatball ea laboris rump cupidatat labore culpa. Shankle minim beef, velit sint cupidatat fugiat tenderloin pig et ball tip. Ut cow fatback salami, bacon ball tip et in shank strip steak bresaola. In ut pork belly sed mollit tri-tip magna culpa veniam, short ribs qui in andouille ham consequat. Dolore bacon t-bone, velit short ribs enim strip steak nulla. Voluptate labore ut, biltong swine irure jerky. Cupidatat excepteur aliquip salami dolore. Ball tip strip steak in pork dolor. Ad in esse biltong. Dolore tenderloin exercitation ad pork loin t-bone, dolore in chicken ball tip qui pig. Ut culpa tongue, sint ribeye dolore ex shank voluptate hamburger. Jowl et tempor, boudin pork chop labore ham hock drumstick consectetur tri-tip elit swine meatball chicken ground round. Proident shankle mollit dolore. Shoulder ut duis t-bone quis reprehenderit. Meatloaf dolore minim strip steak, laboris ea aute bacon beef ribs elit shank in veniam drumstick qui. Ex laboris meatball cow tongue pork belly. Ea ball tip reprehenderit pig, sed fatback boudin dolore flank aliquip laboris eu quis. Beef ribs duis beef, cow corned beef adipisicing commodo nisi deserunt exercitation. Cillum dolor t-bone spare ribs, ham hock est sirloin. Brisket irure meatloaf in, boudin pork belly sirloin ball tip. Sirloin sint irure nisi nostrud aliqua. Nostrud nulla aute, enim officia culpa ham hock. Aliqua reprehenderit dolore sunt nostrud sausage, ea boudin pork loin ut t-bone ham tempor. Tri-tip et pancetta drumstick laborum. Ham hock magna do nostrud in proident. Ex ground round fatback, venison non ribeye in.';
 
          document.body.insertBefore(div, firstChild);
 
          /* get size of unhyphenated text */
          divStyle.cssText = 'position:absolute;top:0;left:0;width:5em;text-align:justify;text-justification:newspaper;';
          spanHeight = span.offsetHeight;
          spanWidth = span.offsetWidth;
 
          /* compare size with hyphenated text */
          divStyle.cssText = 'position:absolute;top:0;left:0;width:5em;text-align:justify;' +
            'text-justification:newspaper;' +
            prefixes.join('hyphens:auto; ');
 
          result = (span.offsetHeight != spanHeight || span.offsetWidth != spanWidth);
 
          /* results and cleanup */
          document.body.removeChild(div);
          div.removeChild(span);
 
          return result;
        } catch (e) {
          return false;
        }
      }
 
      // for the softhyphens test
      function test_hyphens(delimiter, testWidth) {
        try {
          /* create a div container and a span within that
           * these have to be appended to document.body, otherwise some browsers can give false negative */
          var div = createElement('div');
          var span = createElement('span');
          var divStyle = div.style;
          var spanSize = 0;
          var result = false;
          var result1 = false;
          var result2 = false;
          var firstChild = document.body.firstElementChild || document.body.firstChild;
 
          divStyle.cssText = 'position:absolute;top:0;left:0;overflow:visible;width:1.25em;';
          div.appendChild(span);
          document.body.insertBefore(div, firstChild);
 
 
          /* get height of unwrapped text */
          span.innerHTML = 'mm';
          spanSize = span.offsetHeight;
 
          /* compare height w/ delimiter, to see if it wraps to new line */
          span.innerHTML = 'm' + delimiter + 'm';
          result1 = (span.offsetHeight > spanSize);
 
          /* if we're testing the width too (i.e. for soft-hyphen, not zws),
           * this is because tested Blackberry devices will wrap the text but not display the hyphen */
          if (testWidth) {
            /* get width of wrapped, non-hyphenated text */
            span.innerHTML = 'm<br />m';
            spanSize = span.offsetWidth;
 
            /* compare width w/ wrapped w/ delimiter to see if hyphen is present */
            span.innerHTML = 'm' + delimiter + 'm';
            result2 = (span.offsetWidth > spanSize);
          } else {
            result2 = true;
          }
 
          /* results and cleanup */
          if (result1 === true && result2 === true) { result = true; }
          document.body.removeChild(div);
          div.removeChild(span);
 
          return result;
        } catch (e) {
          return false;
        }
      }
 
      // testing if in-browser Find functionality will work on hyphenated text
      function test_hyphens_find(delimiter) {
        try {
          /* create a dummy input for resetting selection location, and a div container
           * these have to be appended to document.body, otherwise some browsers can give false negative
           * div container gets the doubled testword, separated by the delimiter
           * Note: giving a width to div gives false positive in iOS Safari */
          var dummy = createElement('input');
          var div = createElement('div');
          var testword = 'lebowski';
          var result = false;
          var textrange;
          var firstChild = document.body.firstElementChild || document.body.firstChild;
 
          div.innerHTML = testword + delimiter + testword;
 
          document.body.insertBefore(div, firstChild);
          document.body.insertBefore(dummy, div);
 
 
          /* reset the selection to the dummy input element, i.e. BEFORE the div container
           *   stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area */
          if (dummy.setSelectionRange) {
            dummy.focus();
            dummy.setSelectionRange(0, 0);
          } else if (dummy.createTextRange) {
            textrange = dummy.createTextRange();
            textrange.collapse(true);
            textrange.moveEnd('character', 0);
            textrange.moveStart('character', 0);
            textrange.select();
          }
 
          /* try to find the doubled testword, without the delimiter */
          try {
            if (window.find) {
              result = window.find(testword + testword);
            } else {
              textrange = window.self.document.body.createTextRange();
              result = textrange.findText(testword + testword);
            }
          } catch (e) {
            result = false;
          }
 
          document.body.removeChild(div);
          document.body.removeChild(dummy);
 
          return result;
        } catch (e) {
          return false;
        }
      }
 
      addTest('csshyphens', function() {
 
        if (!testAllProps('hyphens', 'auto', true)) {
          return false;
        }
 
        /* Chrome lies about its hyphens support so we need a more robust test
           crbug.com/107111
           */
        try {
          return test_hyphens_css();
        } catch (e) {
          return false;
        }
      });
 
      addTest('softhyphens', function() {
        try {
          // use numeric entity instead of &shy; in case it's XHTML
          return test_hyphens('&#173;', true) && test_hyphens('&#8203;', false);
        } catch (e) {
          return false;
        }
      });
 
      addTest('softhyphensfind', function() {
        try {
          return test_hyphens_find('&#173;') && test_hyphens_find('&#8203;');
        } catch (e) {
          return false;
        }
      });
 
    }
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/invalid.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/invalid.js

Statements: 14.29% (1 / 7)      Branches: 100% (0 / 0)      Functions: 0% (0 / 3)      Lines: 14.29% (1 / 7)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25                          2                      
/*!
{
  "name": "CSS :invalid pseudo-class",
  "property": "cssinvalid",
  "notes": [{
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en-US/docs/Web/CSS/:invalid"
  }]
}
!*/
/* DOC
  Detects support for the ':invalid' CSS pseudo-class.
*/
define(['Modernizr', 'testStyles', 'createElement'], function(Modernizr, testStyles, createElement) {
  Modernizr.addTest('cssinvalid', function() {
    return testStyles('#modernizr input{height:0;border:0;padding:0;margin:0;width:10px} #modernizr input:invalid{width:50px}', function(elem) {
      var input = createElement('input');
      input.required = true;
      elem.appendChild(input);
      return input.clientWidth > 10;
    });
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/lastchild.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/lastchild.js

Statements: 33.33% (1 / 3)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20                          2            
/*!
{
  "name": "CSS :last-child pseudo-selector",
  "caniuse": "css-sel3",
  "property": "lastchild",
  "tags": ["css"],
  "builderAliases": ["css_lastchild"],
  "notes": [{
    "name": "Related Github Issue",
    "href": "https://github.com/Modernizr/Modernizr/pull/304"
  }]
}
!*/
define(['Modernizr', 'testStyles'], function(Modernizr, testStyles) {
  testStyles('#modernizr div {width:100px} #modernizr :last-child{width:200px;display:block}', function(elem) {
    Modernizr.addTest('lastchild', elem.lastChild.offsetWidth > elem.firstChild.offsetWidth);
  }, 2);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/mask.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/mask.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32                                                      2        
/*!
{
  "name": "CSS Mask",
  "caniuse": "css-masks",
  "property": "cssmask",
  "tags": ["css"],
  "builderAliases": ["css_mask"],
  "notes": [
    {
      "name": "Webkit blog on CSS Masks",
      "href": "https://webkit.org/blog/181/css-masks/"
    },
    {
      "name": "Safari Docs",
      "href": "https://developer.apple.com/library/safari/#documentation/InternetWeb/Conceptual/SafariVisualEffectsProgGuide/Masks/Masks.html"
    },
    {
      "name": "CSS SVG mask",
      "href": "https://developer.mozilla.org/en-US/docs/Web/CSS/mask"
    },
    {
      "name": "Combine with clippaths for awesomeness",
      "href": "https://generic.cx/for/webkit/test.html"
    }
  ]
}
!*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('cssmask', testAllProps('maskRepeat', 'repeat-x', true));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/mediaqueries.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/mediaqueries.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14                  2        
/*!
{
  "name": "CSS Media Queries",
  "caniuse": "css-mediaqueries",
  "property": "mediaqueries",
  "tags": ["css"],
  "builderAliases": ["css_mediaqueries"]
}
!*/
define(['Modernizr', 'mq'], function(Modernizr, mq) {
  Modernizr.addTest('mediaqueries', mq('only all'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/multiplebgs.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/multiplebgs.js

Statements: 20% (1 / 5)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 20% (1 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24                2                              
/*!
{
  "name": "CSS Multiple Backgrounds",
  "caniuse": "multibackgrounds",
  "property": "multiplebgs",
  "tags": ["css"]
}
!*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  // Setting multiple images AND a color on the background shorthand property
  // and then querying the style.background property value for the number of
  // occurrences of "url(" is a reliable method for detecting ACTUAL support for this!
 
  Modernizr.addTest('multiplebgs', function() {
    var style = createElement('a').style;
    style.cssText = 'background:url(https://),url(https://),red url(https://)';
 
    // If the UA supports multiple backgrounds, there should be three occurrences
    // of the string "url(" in the return value for elemStyle.background
    return (/(url\s*\(.*?){3}/).test(style.background);
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/nthchild.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/nthchild.js

Statements: 14.29% (1 / 7)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 14.29% (1 / 7)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40                                              2                                
/*!
{
  "name": "CSS :nth-child pseudo-selector",
  "caniuse": "css-sel3",
  "property": "nthchild",
  "tags": ["css"],
  "notes": [
    {
      "name": "Related Github Issue",
      "href": "https://github.com/Modernizr/Modernizr/pull/685"
    },
    {
      "name": "Sitepoint :nth-child documentation",
      "href": "http://reference.sitepoint.com/css/pseudoclass-nthchild"
    }
  ],
  "authors": ["@emilchristensen"],
  "warnings": ["Known false negative in Safari 3.1 and Safari 3.2.2"]
}
!*/
/* DOC
Detects support for the ':nth-child()' CSS pseudo-selector.
*/
define(['Modernizr', 'testStyles'], function(Modernizr, testStyles) {
  // 5 `<div>` elements with `1px` width are created.
  // Then every other element has its `width` set to `2px`.
  // A Javascript loop then tests if the `<div>`s have the expected width
  // using the modulus operator.
  testStyles('#modernizr div {width:1px} #modernizr div:nth-child(2n) {width:2px;}', function(elem) {
    var elems = elem.getElementsByTagName('div');
    var correctWidths = true;
 
    for (var i = 0; i < 5; i++) {
      correctWidths = correctWidths && elems[i].offsetWidth === i % 2 + 1;
    }
    Modernizr.addTest('nthchild', correctWidths);
  }, 5);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/objectfit.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/objectfit.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18                          2        
/*!
{
  "name": "CSS Object Fit",
  "caniuse": "object-fit",
  "property": "objectfit",
  "tags": ["css"],
  "builderAliases": ["css_objectfit"],
  "notes": [{
    "name": "Opera Article on Object Fit",
    "href": "https://dev.opera.com/articles/css3-object-fit-object-position/"
  }]
}
!*/
define(['Modernizr', 'prefixed'], function(Modernizr, prefixed) {
  Modernizr.addTest('objectfit', !!prefixed('objectFit'), {aliases: ['object-fit']});
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/opacity.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/opacity.js

Statements: 20% (1 / 5)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 20% (1 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25                2                                
/*!
{
  "name": "CSS Opacity",
  "caniuse": "css-opacity",
  "property": "opacity",
  "tags": ["css"]
}
!*/
define(['Modernizr', 'createElement', 'prefixes'], function(Modernizr, createElement, prefixes) {
  // Browsers that actually have CSS Opacity implemented have done so
  // according to spec, which means their return values are within the
  // range of [0.0,1.0] - including the leading zero.
 
  Modernizr.addTest('opacity', function() {
    var style = createElement('a').style;
    style.cssText = prefixes.join('opacity:.55;');
 
    // The non-literal . in this regex is intentional:
    // German Chrome returns this value as 0,55
    // github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632
    return (/^0.55$/).test(style.opacity);
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/overflow-scrolling.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/overflow-scrolling.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18                          2        
/*!
{
  "name": "CSS Overflow Scrolling",
  "property": "overflowscrolling",
  "tags": ["css"],
  "builderAliases": ["css_overflow_scrolling"],
  "warnings": ["Introduced in iOS5b2. API is subject to change."],
  "notes": [{
    "name": "Article on iOS overflow scrolling",
    "href": "https://css-tricks.com/snippets/css/momentum-scrolling-on-ios-overflow-elements/"
  }]
}
!*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('overflowscrolling', testAllProps('overflowScrolling', 'touch', true));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/pointerevents.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/pointerevents.js

Statements: 20% (1 / 5)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 20% (1 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35                                                    2                
/*!
{
  "name": "CSS Pointer Events",
  "caniuse": "pointer-events",
  "property": "csspointerevents",
  "authors": ["ausi"],
  "tags": ["css"],
  "builderAliases": ["css_pointerevents"],
  "notes": [
    {
      "name": "MDN Docs",
      "href": "https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events"
    },{
      "name": "Test Project Page",
      "href": "https://ausi.github.com/Feature-detection-technique-for-pointer-events/"
    },{
      "name": "Test Project Wiki",
      "href": "https://github.com/ausi/Feature-detection-technique-for-pointer-events/wiki"
    },
    {
      "name": "Related Github Issue",
      "href": "https://github.com/Modernizr/Modernizr/issues/80"
    }
  ]
}
!*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('csspointerevents', function() {
    var style = createElement('a').style;
    style.cssText = 'pointer-events:auto';
    return style.pointerEvents === 'auto';
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/positionsticky.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/positionsticky.js

Statements: 12.5% (1 / 8)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 12.5% (1 / 8)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29                          2                              
/*!
{
  "name": "CSS position: sticky",
  "property": "csspositionsticky",
  "tags": ["css"],
  "builderAliases": ["css_positionsticky"],
  "notes": [{
    "name": "Chrome bug report",
    "href":"https://code.google.com/p/chromium/issues/detail?id=322972"
  }],
  "warnings": [ "using position:sticky on anything but top aligned elements is buggy in Chrome < 37 and iOS <=7+" ]
}
!*/
define(['Modernizr', 'createElement', 'prefixes'], function(Modernizr, createElement, prefixes) {
  // Sticky positioning - constrains an element to be positioned inside the
  // intersection of its container box, and the viewport.
  Modernizr.addTest('csspositionsticky', function() {
    var prop = 'position:';
    var value = 'sticky';
    var el = createElement('a');
    var mStyle = el.style;
 
    mStyle.cssText = prop + prefixes.join(value + ';' + prop).slice(0, -prop.length);
 
    return mStyle.position.indexOf(value) !== -1;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/pseudoanimations.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/pseudoanimations.js

Statements: 11.11% (1 / 9)      Branches: 0% (0 / 4)      Functions: 0% (0 / 3)      Lines: 11.11% (1 / 9)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31              2                                              
/*!
{
  "name": "CSS Generated Content Animations",
  "property": "csspseudoanimations",
  "tags": ["css"]
}
!*/
define(['Modernizr', 'testStyles', 'test/css/animations'], function(Modernizr) {
  Modernizr.addTest('csspseudoanimations', function() {
    var result = false;
 
    if (!Modernizr.cssanimations || !window.getComputedStyle) {
      return result;
    }
 
    var styles = [
      '@', Modernizr._prefixes.join('keyframes csspseudoanimations { from { font-size: 10px; } }@').replace(/\@$/, ''),
      '#modernizr:before { content:" "; font-size:5px;',
      Modernizr._prefixes.join('animation:csspseudoanimations 1ms infinite;'),
      '}'
    ].join('');
 
    Modernizr.testStyles(styles, function(elem) {
      result = window.getComputedStyle(elem, ':before').getPropertyValue('font-size') === '10px';
    });
 
    return result;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/pseudotransitions.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/pseudotransitions.js

Statements: 9.09% (1 / 11)      Branches: 0% (0 / 4)      Functions: 0% (0 / 3)      Lines: 9.09% (1 / 11)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31              2                                              
/*!
{
  "name": "CSS Generated Content Transitions",
  "property": "csspseudotransitions",
  "tags": ["css"]
}
!*/
define(['Modernizr', 'testStyles', 'test/css/transitions'], function(Modernizr) {
  Modernizr.addTest('csspseudotransitions', function() {
    var result = false;
 
    if (!Modernizr.csstransitions || !window.getComputedStyle) {
      return result;
    }
 
    var styles =
      '#modernizr:before { content:" "; font-size:5px;' + Modernizr._prefixes.join('transition:0s 100s;') + '}' +
      '#modernizr.trigger:before { font-size:10px; }';
 
    Modernizr.testStyles(styles, function(elem) {
      // Force rendering of the element's styles so that the transition will trigger
      window.getComputedStyle(elem, ':before').getPropertyValue('font-size');
      elem.className += 'trigger';
      result = window.getComputedStyle(elem, ':before').getPropertyValue('font-size') === '5px';
    });
 
    return result;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/reflections.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/reflections.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13                2        
/*!
{
  "name": "CSS Reflections",
  "caniuse": "css-reflections",
  "property": "cssreflections",
  "tags": ["css"]
}
!*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('cssreflections', testAllProps('boxReflect', 'above', true));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/regions.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/regions.js

Statements: 2.7% (1 / 37)      Branches: 0% (0 / 13)      Functions: 0% (0 / 2)      Lines: 2.7% (1 / 37)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96                            2                                                                                                                                                                  
/*!
{
  "name": "CSS Regions",
  "caniuse": "css-regions",
  "authors": ["Mihai Balan"],
  "property": "regions",
  "tags": ["css"],
  "builderAliases": ["css_regions"],
  "notes": [{
    "name": "W3C Specification",
    "href": "https://www.w3.org/TR/css3-regions/"
  }]
}
!*/
define(['Modernizr', 'createElement', 'docElement', 'isSVG', 'prefixed'], function(Modernizr, createElement, docElement, isSVG, prefixed) {
  // We start with a CSS parser test then we check page geometry to see if it's affected by regions
  // Later we might be able to retire the second part, as WebKit builds with the false positives die out
 
  Modernizr.addTest('regions', function() {
 
    if (isSVG) {
      // css regions don't work inside of SVG elements. Rather than update the
      // below test to work in an SVG context, just exit early to save bytes
      return false;
    }
 
    /* Get the 'flowFrom' property name available in the browser. Either default or vendor prefixed.
       If the property name can't be found we'll get Boolean 'false' and fail quickly */
    var flowFromProperty = prefixed('flowFrom');
    var flowIntoProperty = prefixed('flowInto');
    var result = false;
 
    if (!flowFromProperty || !flowIntoProperty) {
      return result;
    }
 
    /* If CSS parsing is there, try to determine if regions actually work. */
    var iframeContainer = createElement('iframe');
    var container = createElement('div');
    var content = createElement('div');
    var region = createElement('div');
 
    /* we create a random, unlikely to be generated flow number to make sure we don't
       clash with anything more vanilla, like 'flow', or 'article', or 'f1' */
    var flowName = 'modernizr_flow_for_regions_check';
 
    /* First create a div with two adjacent divs inside it. The first will be the
       content, the second will be the region. To be able to distinguish between the two,
       we'll give the region a particular padding */
    content.innerText = 'M';
    container.style.cssText = 'top: 150px; left: 150px; padding: 0px;';
    region.style.cssText = 'width: 50px; height: 50px; padding: 42px;';
 
    region.style[flowFromProperty] = flowName;
    container.appendChild(content);
    container.appendChild(region);
    docElement.appendChild(container);
 
    /* Now compute the bounding client rect, before and after attempting to flow the
       content div in the region div. If regions are enabled, the after bounding rect
       should reflect the padding of the region div.*/
    var flowedRect, delta;
    var plainRect = content.getBoundingClientRect();
 
 
    content.style[flowIntoProperty] = flowName;
    flowedRect = content.getBoundingClientRect();
 
    delta = parseInt(flowedRect.left - plainRect.left, 10);
    docElement.removeChild(container);
 
    if (delta == 42) {
      result = true;
    } else {
      /* IE only allows for the content to come from iframes. This has the
       * side effect of automatic collapsing of iframes once they get the flow-into
       * property set. checking for a change on the height allows us to detect this
       * in a sync way, without having to wait for a frame to load */
 
      docElement.appendChild(iframeContainer);
      plainRect = iframeContainer.getBoundingClientRect();
      iframeContainer.style[flowIntoProperty] = flowName;
      flowedRect = iframeContainer.getBoundingClientRect();
 
      if (plainRect.height > 0 && plainRect.height !== flowedRect.height && flowedRect.height === 0) {
        result = true;
      }
    }
 
    content = region = container = iframeContainer = undefined;
 
    return result;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/remunit.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/remunit.js

Statements: 16.67% (1 / 6)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 16.67% (1 / 6)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33                                  2                              
/*!
{
  "name": "CSS Font rem Units",
  "caniuse": "rem",
  "authors": ["nsfmc"],
  "property": "cssremunit",
  "tags": ["css"],
  "builderAliases": ["css_remunit"],
  "notes": [{
    "name": "W3C Spec",
    "href": "https://www.w3.org/TR/css3-values/#relative0"
  },{
    "name": "Font Size with rem by Jonathan Snook",
    "href": "http://snook.ca/archives/html_and_css/font-size-with-rem"
  }]
}
!*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  // "The 'rem' unit ('root em') is relative to the computed
  // value of the 'font-size' value of the root element."
  // you can test by checking if the prop was ditched
 
  Modernizr.addTest('cssremunit', function() {
    var style = createElement('a').style;
    try {
      style.fontSize = '3rem';
    }
    catch (e) {}
    return (/rem/).test(style.fontSize);
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/resize.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/resize.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24                                      2        
/*!
{
  "name": "CSS UI Resize",
  "property": "cssresize",
  "caniuse": "css-resize",
  "tags": ["css"],
  "builderAliases": ["css_resize"],
  "notes": [{
    "name": "W3C Specification",
    "href": "https://www.w3.org/TR/css3-ui/#resize"
  },{
    "name": "MDN Docs",
    "href": "https://developer.mozilla.org/en/CSS/resize"
  }]
}
!*/
/* DOC
Test for CSS 3 UI "resize" property
*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('cssresize', testAllProps('resize', 'both', true));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/rgba.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/rgba.js

Statements: 20% (1 / 5)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 20% (1 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22                        2                  
/*!
{
  "name": "CSS rgba",
  "caniuse": "css3-colors",
  "property": "rgba",
  "tags": ["css"],
  "notes": [{
    "name": "CSSTricks Tutorial",
    "href": "https://css-tricks.com/rgba-browser-support/"
  }]
}
!*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('rgba', function() {
    var style = createElement('a').style;
    style.cssText = 'background-color:rgba(150,255,150,.5)';
 
    return ('' + style.backgroundColor).indexOf('rgba') > -1;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/scrollbars.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/scrollbars.js

Statements: 33.33% (1 / 3)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20                2                      
/*!
{
  "name": "CSS Stylable Scrollbars",
  "property": "cssscrollbar",
  "tags": ["css"],
  "builderAliases": ["css_scrollbars"]
}
!*/
define(['Modernizr', 'testStyles', 'prefixes'], function(Modernizr, testStyles, prefixes) {
  testStyles('#modernizr{overflow: scroll; width: 40px; height: 40px; }#' + prefixes
    .join('scrollbar{width:10px}' + ' #modernizr::')
    .split('#')
    .slice(1)
    .join('#') + 'scrollbar{width:10px}',
  function(node) {
    Modernizr.addTest('cssscrollbar', 'scrollWidth' in node && node.scrollWidth == 30);
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/scrollsnappoints.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/scrollsnappoints.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22                                  2        
/*!
{
  "name": "Scroll Snap Points",
  "property": "scrollsnappoints",
  "notes": [{
    "name": "Setting native-like scrolling offsets in CSS with Scrolling Snap Points",
    "href": "http://generatedcontent.org/post/66817675443/setting-native-like-scrolling-offsets-in-css-with"
  },{
    "name": "MDN Article",
    "href": "https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Scroll_Snap_Points"
  }],
  "polyfills": ["scrollsnap"]
}
!*/
/* DOC
Detects support for CSS Snap Points
*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('scrollsnappoints', testAllProps('scrollSnapType'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/shapes.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/shapes.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22                                  2        
/*!
{
  "name": "CSS Shapes",
  "property": "shapes",
  "tags": ["css"],
  "notes": [{
    "name": "CSS Shapes W3C specification",
    "href": "https://www.w3.org/TR/css-shapes"
  },{
    "name": "Examples from Adobe",
    "href": "http://webplatform.adobe.com/shapes/"
  }, {
    "name": "Samples showcasing uses of Shapes",
    "href": "http://codepen.io/collection/qFesk"
  }]
}
!*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('shapes', testAllProps('shapeOutside', 'content-box', true));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/siblinggeneral.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/siblinggeneral.js

Statements: 25% (1 / 4)      Branches: 100% (0 / 0)      Functions: 0% (0 / 3)      Lines: 25% (1 / 4)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21                        2                
/*!
{
  "name": "CSS general sibling selector",
  "caniuse": "css-sel3",
  "property": "siblinggeneral",
  "tags": ["css"],
  "notes": [{
    "name": "Related Github Issue",
    "href": "https://github.com/Modernizr/Modernizr/pull/889"
  }]
}
!*/
define(['Modernizr', 'createElement', 'testStyles'], function(Modernizr, createElement, testStyles) {
  Modernizr.addTest('siblinggeneral', function() {
    return testStyles('#modernizr div {width:100px} #modernizr div ~ div {width:200px;display:block}', function(elem) {
      return elem.lastChild.offsetWidth == 200;
    }, 2);
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/subpixelfont.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/subpixelfont.js

Statements: 20% (1 / 5)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 20% (1 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35                                      2                              
/*!
{
  "name": "CSS Subpixel Fonts",
  "property": "subpixelfont",
  "tags": ["css"],
  "builderAliases": ["css_subpixelfont"],
  "authors": [
    "@derSchepp",
    "@gerritvanaaken",
    "@rodneyrehm",
    "@yatil",
    "@ryanseddon"
  ],
  "notes": [{
    "name": "Origin Test",
    "href": "https://github.com/gerritvanaaken/subpixeldetect"
  }]
}
!*/
define(['Modernizr', 'testStyles'], function(Modernizr, testStyles) {
  /*
   * (to infer if GDI or DirectWrite is used on Windows)
   */
  testStyles(
    '#modernizr{position: absolute; top: -10em; visibility:hidden; font: normal 10px arial;}#subpixel{float: left; font-size: 33.3333%;}',
  function(elem) {
    var subpixel = elem.firstChild;
    subpixel.innerHTML = 'This is a text written in Arial';
    Modernizr.addTest('subpixelfont', window.getComputedStyle ?
      window.getComputedStyle(subpixel, null).getPropertyValue('width') !== '44px'
    : false);
  }, 1, ['subpixel']);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/supports.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/supports.js

Statements: 25% (1 / 4)      Branches: 0% (0 / 4)      Functions: 0% (0 / 1)      Lines: 25% (1 / 4)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26                                      2            
/*!
{
  "name": "CSS Supports",
  "property": "supports",
  "caniuse": "css-featurequeries",
  "tags": ["css"],
  "builderAliases": ["css_supports"],
  "notes": [{
    "name": "W3 Spec",
    "href": "http://dev.w3.org/csswg/css3-conditional/#at-supports"
  },{
    "name": "Related Github Issue",
    "href": "https://github.com/Modernizr/Modernizr/issues/648"
  },{
    "name": "W3 Info",
    "href": "http://dev.w3.org/csswg/css3-conditional/#the-csssupportsrule-interface"
  }]
}
!*/
define(['Modernizr'], function(Modernizr) {
  var newSyntax = 'CSS' in window && 'supports' in window.CSS;
  var oldSyntax = 'supportsCSS' in window;
  Modernizr.addTest('supports', newSyntax || oldSyntax);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/target.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/target.js

Statements: 11.11% (1 / 9)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 11.11% (1 / 9)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35                                  2                                  
/*!
{
  "name": "CSS :target pseudo-class",
  "caniuse": "css-sel3",
  "property": "target",
  "tags": ["css"],
  "notes": [{
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en-US/docs/Web/CSS/:target"
  }],
  "authors": ["@zachleat"],
  "warnings": ["Opera Mini supports :target but doesn't update the hash for anchor links."]
}
!*/
/* DOC
Detects support for the ':target' CSS pseudo-class.
*/
define(['Modernizr'], function(Modernizr) {
  // querySelector
  Modernizr.addTest('target', function() {
    var doc = window.document;
    if (!('querySelectorAll' in doc)) {
      return false;
    }
 
    try {
      doc.querySelectorAll(':target');
      return true;
    } catch (e) {
      return false;
    }
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/textalignlast.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/textalignlast.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20                              2        
/*!
{
  "name": "CSS text-align-last",
  "property": "textalignlast",
  "tags": ["css"],
  "knownBugs": ["IE does not support the 'start' or 'end' values."],
  "notes": [{
      "name": "Quicksmode",
      "href": "http://www.quirksmode.org/css/text/textalignlast.html"
    },{
      "name": "MDN",
      "href": "https://developer.mozilla.org/en-US/docs/Web/CSS/text-align-last"
    }]
}
!*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('textalignlast', testAllProps('textAlignLast'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/textshadow.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/textshadow.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14                  2        
/*!
{
  "name": "CSS textshadow",
  "property": "textshadow",
  "caniuse": "css-textshadow",
  "tags": ["css"],
  "knownBugs": ["FF3.0 will false positive on this test"]
}
!*/
define(['Modernizr', 'testProp'], function(Modernizr, testProp) {
  Modernizr.addTest('textshadow', testProp('textShadow', '1px 1px'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/transforms.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/transforms.js

Statements: 33.33% (1 / 3)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18                2                  
/*!
{
  "name": "CSS Transforms",
  "property": "csstransforms",
  "caniuse": "transforms2d",
  "tags": ["css"]
}
!*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('csstransforms', function() {
    // Android < 3.0 is buggy, so we sniff and blacklist
    // http://git.io/hHzL7w
    return navigator.userAgent.indexOf('Android 2.') === -1 &&
           testAllProps('transform', 'scale(1)', true);
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/transforms3d.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/transforms3d.js

Statements: 6.25% (1 / 16)      Branches: 0% (0 / 11)      Functions: 0% (0 / 3)      Lines: 6.25% (1 / 16)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47                      2                                                                      
/*!
{
  "name": "CSS Transforms 3D",
  "property": "csstransforms3d",
  "caniuse": "transforms3d",
  "tags": ["css"],
  "warnings": [
    "Chrome may occassionally fail this test on some systems; more info: https://code.google.com/p/chromium/issues/detail?id=129004"
  ]
}
!*/
define(['Modernizr', 'testAllProps', 'testStyles', 'docElement', 'test/css/supports'], function(Modernizr, testAllProps, testStyles, docElement) {
  Modernizr.addTest('csstransforms3d', function() {
    var ret = !!testAllProps('perspective', '1px', true);
    var usePrefix = Modernizr._config.usePrefixes;
 
    // Webkit's 3D transforms are passed off to the browser's own graphics renderer.
    //   It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in
    //   some conditions. As a result, Webkit typically recognizes the syntax but
    //   will sometimes throw a false positive, thus we must do a more thorough check:
    if (ret && (!usePrefix || 'webkitPerspective' in docElement.style)) {
      var mq;
      var defaultStyle = '#modernizr{width:0;height:0}';
      // Use CSS Conditional Rules if available
      if (Modernizr.supports) {
        mq = '@supports (perspective: 1px)';
      } else {
        // Otherwise, Webkit allows this media query to succeed only if the feature is enabled.
        // `@media (transform-3d),(-webkit-transform-3d){ ... }`
        mq = '@media (transform-3d)';
        if (usePrefix) {
          mq += ',(-webkit-transform-3d)';
        }
      }
 
      mq += '{#modernizr{width:7px;height:18px;margin:0;padding:0;border:0}}';
 
      testStyles(defaultStyle + mq, function(elem) {
        ret = elem.offsetWidth === 7 && elem.offsetHeight === 18;
      });
    }
 
    return ret;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/transformslevel2.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/transformslevel2.js

Statements: 33.33% (1 / 3)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19                        2            
/*!
{
  "name": "CSS Transforms Level 2",
  "property": "csstransformslevel2",
  "authors": ["rupl"],
  "tags": ["css"],
  "notes": [{
    "name": "CSSWG Draft Spec",
    "href": "https://drafts.csswg.org/css-transforms-2/"
  }]
}
!*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('csstransformslevel2', function() {
    return testAllProps('translate', '45px', true);
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/transformstylepreserve3d.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/transformstylepreserve3d.js

Statements: 5.88% (1 / 17)      Branches: 0% (0 / 7)      Functions: 0% (0 / 2)      Lines: 5.88% (1 / 17)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46                                    2                                                      
/*!
{
  "name": "CSS Transform Style preserve-3d",
  "property": "preserve3d",
  "authors": ["denyskoch", "aFarkas"],
  "tags": ["css"],
  "notes": [{
    "name": "MDN Docs",
    "href": "https://developer.mozilla.org/en-US/docs/Web/CSS/transform-style"
  },{
    "name": "Related Github Issue",
    "href": "https://github.com/Modernizr/Modernizr/issues/1748"
  }]
}
!*/
/* DOC
Detects support for `transform-style: preserve-3d`, for getting a proper 3D perspective on elements.
*/
define(['Modernizr', 'createElement', 'docElement'], function(Modernizr, createElement, docElement) {
  Modernizr.addTest('preserve3d', function() {
    var outerAnchor, innerAnchor;
    var CSS = window.CSS;
    var result = false;
 
    if (CSS && CSS.supports && CSS.supports('(transform-style: preserve-3d)')) {
      return true;
    }
 
    outerAnchor = createElement('a');
    innerAnchor = createElement('a');
 
    outerAnchor.style.cssText = 'display: block; transform-style: preserve-3d; transform-origin: right; transform: rotateY(40deg);';
    innerAnchor.style.cssText = 'display: block; width: 9px; height: 1px; background: #000; transform-origin: right; transform: rotateY(40deg);';
 
    outerAnchor.appendChild(innerAnchor);
    docElement.appendChild(outerAnchor);
 
    result = innerAnchor.getBoundingClientRect();
    docElement.removeChild(outerAnchor);
 
    result = result.width && result.width < 4;
    return result;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/transitions.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/transitions.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13                2        
/*!
{
  "name": "CSS Transitions",
  "property": "csstransitions",
  "caniuse": "css-transitions",
  "tags": ["css"]
}
!*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  Modernizr.addTest('csstransitions', testAllProps('transition', 'all', true));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/userselect.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/userselect.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20                            2          
/*!
{
  "name": "CSS user-select",
  "property": "userselect",
  "caniuse": "user-select-none",
  "authors": ["ryan seddon"],
  "tags": ["css"],
  "builderAliases": ["css_userselect"],
  "notes": [{
    "name": "Related Modernizr Issue",
    "href": "https://github.com/Modernizr/Modernizr/issues/250"
  }]
}
!*/
define(['Modernizr', 'testAllProps'], function(Modernizr, testAllProps) {
  //https://github.com/Modernizr/Modernizr/issues/250
  Modernizr.addTest('userselect', testAllProps('userSelect', 'none', true));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/valid.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/valid.js

Statements: 16.67% (1 / 6)      Branches: 100% (0 / 0)      Functions: 0% (0 / 3)      Lines: 16.67% (1 / 6)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24                          2                    
/*!
{
  "name": "CSS :valid pseudo-class",
  "property": "cssvalid",
  "notes": [{
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en-US/docs/Web/CSS/:valid"
  }]
}
!*/
/* DOC
  Detects support for the ':valid' CSS pseudo-class.
*/
define(['Modernizr', 'testStyles', 'createElement'], function(Modernizr, testStyles, createElement) {
  Modernizr.addTest('cssvalid', function() {
    return testStyles('#modernizr input{height:0;border:0;padding:0;margin:0;width:10px} #modernizr input:valid{width:50px}', function(elem) {
      var input = createElement('input');
      elem.appendChild(input);
      return input.clientWidth > 10;
    });
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/vhunit.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/vhunit.js

Statements: 20% (1 / 5)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 20% (1 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25                                2                
/*!
{
  "name": "CSS vh unit",
  "property": "cssvhunit",
  "caniuse": "viewport-units",
  "tags": ["css"],
  "builderAliases": ["css_vhunit"],
  "notes": [{
    "name": "Related Modernizr Issue",
    "href": "https://github.com/Modernizr/Modernizr/issues/572"
  },{
    "name": "Similar JSFiddle",
    "href": "https://jsfiddle.net/FWeinb/etnYC/"
  }]
}
!*/
define(['Modernizr', 'testStyles', 'computedStyle'], function(Modernizr, testStyles, computedStyle) {
  testStyles('#modernizr { height: 50vh; }', function(elem) {
    var height = parseInt(window.innerHeight / 2, 10);
    var compStyle = parseInt(computedStyle(elem, null, 'height'), 10);
    Modernizr.addTest('cssvhunit', compStyle == height);
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/vmaxunit.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/vmaxunit.js

Statements: 9.09% (1 / 11)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 9.09% (1 / 11)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33                                2                                
/*!
{
  "name": "CSS vmax unit",
  "property": "cssvmaxunit",
  "caniuse": "viewport-units",
  "tags": ["css"],
  "builderAliases": ["css_vmaxunit"],
  "notes": [{
    "name": "Related Modernizr Issue",
    "href": "https://github.com/Modernizr/Modernizr/issues/572"
  },{
    "name": "JSFiddle Example",
    "href": "https://jsfiddle.net/glsee/JDsWQ/4/"
  }]
}
!*/
define(['Modernizr', 'docElement', 'testStyles', 'roundedEquals', 'computedStyle'], function(Modernizr, docElement, testStyles, roundedEquals, computedStyle) {
  testStyles('#modernizr1{width: 50vmax}#modernizr2{width:50px;height:50px;overflow:scroll}#modernizr3{position:fixed;top:0;left:0;bottom:0;right:0}', function(node) {
    var elem = node.childNodes[2];
    var scroller = node.childNodes[1];
    var fullSizeElem = node.childNodes[0];
    var scrollbarWidth = parseInt((scroller.offsetWidth - scroller.clientWidth) / 2, 10);
 
    var one_vw = fullSizeElem.clientWidth / 100;
    var one_vh = fullSizeElem.clientHeight / 100;
    var expectedWidth = parseInt(Math.max(one_vw, one_vh) * 50, 10);
    var compWidth = parseInt(computedStyle(elem, null, 'width'), 10);
 
    Modernizr.addTest('cssvmaxunit', roundedEquals(expectedWidth, compWidth) || roundedEquals(expectedWidth, compWidth - scrollbarWidth));
  }, 3);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/vminunit.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/vminunit.js

Statements: 9.09% (1 / 11)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 9.09% (1 / 11)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33                                2                                
/*!
{
  "name": "CSS vmin unit",
  "property": "cssvminunit",
  "caniuse": "viewport-units",
  "tags": ["css"],
  "builderAliases": ["css_vminunit"],
  "notes": [{
    "name": "Related Modernizr Issue",
    "href": "https://github.com/Modernizr/Modernizr/issues/572"
  },{
    "name": "JSFiddle Example",
    "href": "https://jsfiddle.net/glsee/JRmdq/8/"
  }]
}
!*/
define(['Modernizr', 'docElement', 'testStyles', 'roundedEquals', 'computedStyle'], function(Modernizr, docElement, testStyles, roundedEquals, computedStyle) {
  testStyles('#modernizr1{width: 50vm;width:50vmin}#modernizr2{width:50px;height:50px;overflow:scroll}#modernizr3{position:fixed;top:0;left:0;bottom:0;right:0}', function(node) {
    var elem = node.childNodes[2];
    var scroller = node.childNodes[1];
    var fullSizeElem = node.childNodes[0];
    var scrollbarWidth = parseInt((scroller.offsetWidth - scroller.clientWidth) / 2, 10);
 
    var one_vw = fullSizeElem.clientWidth / 100;
    var one_vh = fullSizeElem.clientHeight / 100;
    var expectedWidth = parseInt(Math.min(one_vw, one_vh) * 50, 10);
    var compWidth = parseInt(computedStyle(elem, null, 'width'), 10);
 
    Modernizr.addTest('cssvminunit', roundedEquals(expectedWidth, compWidth) || roundedEquals(expectedWidth, compWidth - scrollbarWidth));
  }, 3);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/vwunit.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/vwunit.js

Statements: 20% (1 / 5)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 20% (1 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26                                2                  
/*!
{
  "name": "CSS vw unit",
  "property": "cssvwunit",
  "caniuse": "viewport-units",
  "tags": ["css"],
  "builderAliases": ["css_vwunit"],
  "notes": [{
    "name": "Related Modernizr Issue",
    "href": "https://github.com/Modernizr/Modernizr/issues/572"
  },{
    "name": "JSFiddle Example",
    "href": "https://jsfiddle.net/FWeinb/etnYC/"
  }]
}
!*/
define(['Modernizr', 'testStyles', 'computedStyle'], function(Modernizr, testStyles, computedStyle) {
  testStyles('#modernizr { width: 50vw; }', function(elem) {
    var width = parseInt(window.innerWidth / 2, 10);
    var compStyle = parseInt(computedStyle(elem, null, 'width'), 10);
 
    Modernizr.addTest('cssvwunit', compStyle == width);
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/will-change.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/will-change.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19                            2        
/*!
{
  "name": "will-change",
  "property": "willchange",
  "notes": [{
    "name": "Spec",
    "href": "https://drafts.csswg.org/css-will-change/"
  }]
}
!*/
/* DOC
Detects support for the `will-change` css property, which formally signals to the
browser that an element will be animating.
*/
define(['Modernizr', 'docElement'], function(Modernizr, docElement) {
  Modernizr.addTest('willchange', 'willChange' in docElement.style);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/wrapflow.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/css/wrapflow.js

Statements: 5.26% (1 / 19)      Branches: 0% (0 / 4)      Functions: 0% (0 / 3)      Lines: 5.56% (1 / 18)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53                                  2                                                                      
/*!
{
  "name": "CSS wrap-flow",
  "property": "wrapflow",
  "tags": ["css"],
  "notes": [
    {
      "name": "W3C Exclusions spec",
      "href": "https://www.w3.org/TR/css3-exclusions"
    },
    {
      "name": "Example by Adobe",
      "href": "http://html.adobe.com/webstandards/cssexclusions"
    }
  ]
}
!*/
define(['Modernizr', 'prefixed', 'docElement', 'createElement', 'isSVG'], function(Modernizr, prefixed, docElement, createElement, isSVG) {
  Modernizr.addTest('wrapflow', function() {
    var prefixedProperty = prefixed('wrapFlow');
    if (!prefixedProperty || isSVG) {
      return false;
    }
 
    var wrapFlowProperty = prefixedProperty.replace(/([A-Z])/g, function(str, m1) { return '-' + m1.toLowerCase(); }).replace(/^ms-/, '-ms-');
 
    /* If the CSS parsing is there we need to determine if wrap-flow actually works to avoid false positive cases, e.g. the browser parses
       the property, but it hasn't got the implementation for the functionality yet. */
    var container = createElement('div');
    var exclusion = createElement('div');
    var content = createElement('span');
 
    /* First we create a div with two adjacent divs inside it. The first div will be the content, the second div will be the exclusion area.
       We use the "wrap-flow: end" property to test the actual behavior. (http://dev.w3.org/csswg/css3-exclusions/#wrap-flow-property)
       The wrap-flow property is applied to the exclusion area what has a 50px left offset and a 100px width.
       If the wrap-flow property is working correctly then the content should start after the exclusion area, so the content's left offset should be 150px. */
    exclusion.style.cssText = 'position: absolute; left: 50px; width: 100px; height: 20px;' + wrapFlowProperty + ':end;';
    content.innerText = 'X';
 
    container.appendChild(exclusion);
    container.appendChild(content);
    docElement.appendChild(container);
 
    var leftOffset = content.offsetLeft;
 
    docElement.removeChild(container);
    exclusion = content = container = undefined;
 
    return (leftOffset == 150);
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/dom/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/dom/

Statements: 27.59% (8 / 29)      Branches: 0% (0 / 6)      Functions: 0% (0 / 13)      Lines: 27.59% (8 / 29)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/dom/
File Statements Branches Functions Lines
classlist.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
createElement-attrs.js 20% (1 / 5) 100% (0 / 0) 0% (0 / 2) 20% (1 / 5)
dataset.js 20% (1 / 5) 0% (0 / 2) 0% (0 / 2) 20% (1 / 5)
documentfragment.js 33.33% (1 / 3) 0% (0 / 2) 0% (0 / 2) 33.33% (1 / 3)
hidden.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
microdata.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
mutationObserver.js 50% (1 / 2) 0% (0 / 2) 0% (0 / 1) 50% (1 / 2)
passiveeventlisteners.js 12.5% (1 / 8) 100% (0 / 0) 0% (0 / 3) 12.5% (1 / 8)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/dom/classlist.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/dom/classlist.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18                          2        
/*!
{
  "name": "classList",
  "caniuse": "classlist",
  "property": "classlist",
  "tags": ["dom"],
  "builderAliases": ["dataview_api"],
  "notes": [{
    "name": "MDN Docs",
    "href": "https://developer.mozilla.org/en/DOM/element.classList"
  }]
}
!*/
define(['Modernizr', 'docElement'], function(Modernizr, docElement) {
  Modernizr.addTest('classlist', 'classList' in docElement);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/dom/createElement-attrs.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/dom/createElement-attrs.js

Statements: 20% (1 / 5)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 20% (1 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26                          2                        
/*!
{
  "name": "createElement with Attributes",
  "property": ["createelementattrs", "createelement-attrs"],
  "tags": ["dom"],
  "builderAliases": ["dom_createElement_attrs"],
  "authors": ["James A. Rosen"],
  "notes": [{
    "name": "Related Github Issue",
    "href": "https://github.com/Modernizr/Modernizr/issues/258"
  }]
}
!*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('createelementattrs', function() {
    try {
      return createElement('<input name="test" />').getAttribute('name') == 'test';
    } catch (e) {
      return false;
    }
  }, {
    aliases: ['createelement-attrs']
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/dom/dataset.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/dom/dataset.js

Statements: 20% (1 / 5)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 20% (1 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20                    2                  
/*!
{
  "name": "dataset API",
  "caniuse": "dataset",
  "property": "dataset",
  "tags": ["dom"],
  "builderAliases": ["dom_dataset"],
  "authors": ["@phiggins42"]
}
!*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  // dataset API for data-* attributes
  Modernizr.addTest('dataset', function() {
    var n = createElement('div');
    n.setAttribute('data-a-b', 'c');
    return !!(n.dataset && n.dataset.aB === 'c');
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/dom/documentfragment.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/dom/documentfragment.js

Statements: 33.33% (1 / 3)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31                                            2                
/*!
{
  "name": "Document Fragment",
  "property": "documentfragment",
  "notes": [{
    "name": "W3C DOM Level 1 Reference",
    "href": "https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-B63ED1A3"
  }, {
    "name": "SitePoint Reference",
    "href": "http://reference.sitepoint.com/javascript/DocumentFragment"
  }, {
    "name": "QuirksMode Compatibility Tables",
    "href": "http://www.quirksmode.org/m/w3c_core.html#t112"
  }],
  "authors": ["Ron Waldon (@jokeyrhyme)"],
  "knownBugs": ["false-positive on Blackberry 9500, see QuirksMode note"],
  "tags": []
}
!*/
/* DOC
Append multiple elements to the DOM within a single insertion.
*/
define(['Modernizr', 'docElement'], function(Modernizr, docElement) {
  Modernizr.addTest('documentfragment', function() {
    return 'createDocumentFragment' in document &&
      'appendChild' in docElement;
  });
});
 
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/dom/hidden.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/dom/hidden.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24                                      2        
/*!
{
  "name": "[hidden] Attribute",
  "property": "hidden",
  "tags": ["dom"],
  "notes": [{
    "name": "WHATWG: The hidden attribute",
    "href": "https://developers.whatwg.org/editing.html#the-hidden-attribute"
  }, {
    "name": "original implementation of detect code",
    "href": "https://github.com/aFarkas/html5shiv/blob/bf4fcc4/src/html5shiv.js#L38"
  }],
  "polyfills": ["html5shiv"],
  "authors": ["Ron Waldon (@jokeyrhyme)"]
}
!*/
/* DOC
Does the browser support the HTML5 [hidden] attribute?
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('hidden', 'hidden' in createElement('a'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/dom/microdata.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/dom/microdata.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17                        2        
/*!
{
  "name": "microdata",
  "property": "microdata",
  "tags": ["dom"],
  "builderAliases": ["dom_microdata"],
  "notes": [{
    "name": "W3 Spec",
    "href": "https://www.w3.org/TR/microdata/"
  }]
}
!*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('microdata', 'getItems' in document);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/dom/mutationObserver.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/dom/mutationObserver.js

Statements: 50% (1 / 2)      Branches: 0% (0 / 2)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25                                      2          
/*!
{
  "name": "DOM4 MutationObserver",
  "property": "mutationobserver",
  "caniuse": "mutationobserver",
  "tags": ["dom"],
  "authors": ["Karel Sedláček (@ksdlck)"],
  "polyfills": ["mutationobservers"],
  "notes": [{
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver"
  }]
}
!*/
/* DOC
 
Determines if DOM4 MutationObserver support is available.
 
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('mutationobserver',
    !!window.MutationObserver || !!window.WebKitMutationObserver);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/dom/passiveeventlisteners.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/dom/passiveeventlisteners.js

Statements: 12.5% (1 / 8)      Branches: 100% (0 / 0)      Functions: 0% (0 / 3)      Lines: 12.5% (1 / 8)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39                                              2                              
/*!
{
  "authors": ["Rick Byers"],
  "name": "Passive event listeners",
  "notes": [
    {
      "name": "WHATWG specification",
      "href": "https://dom.spec.whatwg.org/#dom-addeventlisteneroptions-passive"
    },
    {
      "name": "WICG explainer",
      "href": "https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md"
    }
  ],
  "property": "passiveeventlisteners",
  "tags": ["dom"]
}
!*/
 
/* DOC
Detects support for the passive option to addEventListener.
*/
 
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('passiveeventlisteners', function() {
    var supportsPassiveOption = false;
    try {
      var opts = Object.defineProperty({}, 'passive', {
        get: function() {
          supportsPassiveOption = true;
        }
      });
      window.addEventListener('test', null, opts);
    } catch (e) {}
    return supportsPassiveOption;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/

Statements: 18.31% (13 / 71)      Branches: 0% (0 / 13)      Functions: 0% (0 / 18)      Lines: 18.31% (13 / 71)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/
File Statements Branches Functions Lines
bdi.js 10% (1 / 10) 100% (0 / 0) 0% (0 / 2) 10% (1 / 10)
datalist.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
details.js 7.69% (1 / 13) 0% (0 / 2) 0% (0 / 3) 7.69% (1 / 13)
output.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
picture.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
progress-meter.js 33.33% (1 / 3) 100% (0 / 0) 0% (0 / 1) 33.33% (1 / 3)
ruby.js 11.11% (3 / 27) 0% (0 / 11) 0% (0 / 4) 11.11% (3 / 27)
template.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
time.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
track.js 33.33% (1 / 3) 100% (0 / 0) 0% (0 / 1) 33.33% (1 / 3)
unknown.js 20% (1 / 5) 100% (0 / 0) 0% (0 / 2) 20% (1 / 5)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/bdi.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/bdi.js

Statements: 10% (1 / 10)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 10% (1 / 10)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32                          2                                    
/*!
{
  "name": "bdi Element",
  "property": "bdi",
  "notes": [{
    "name": "MDN Overview",
    "href": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/bdi"
  }]
}
!*/
/* DOC
Detect support for the bdi element, a way to have text that is isolated from its possibly bidirectional surroundings
*/
define(['Modernizr', 'createElement', 'docElement', 'computedStyle'], function(Modernizr, createElement, docElement, computedStyle) {
  Modernizr.addTest('bdi', function() {
    var div = createElement('div');
    var bdi = createElement('bdi');
 
    bdi.innerHTML = '&#1573;';
    div.appendChild(bdi);
 
    docElement.appendChild(div);
 
    var supports = computedStyle(bdi, null, 'direction') === 'rtl';
 
    docElement.removeChild(div);
 
    return supports;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/datalist.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/datalist.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25                                  2              
/*!
{
  "name": "datalist Element",
  "caniuse": "datalist",
  "property": "datalistelem",
  "tags": ["elem"],
  "builderAliases": ["elem_datalist"],
  "warnings": ["This test is a dupe of Modernizr.input.list. Only around for legacy reasons."],
  "notes": [{
    "name": "CSS Tricks Article",
    "href": "https://css-tricks.com/15346-relevant-dropdowns-polyfill-for-datalist/"
  },{
    "name": "Mike Taylor Code",
    "href": "https://miketaylr.com/code/datalist.html"
  }]
}
!*/
define(['Modernizr', 'test/input'], function(Modernizr) {
  // lol. we already have a test for datalist built in! silly you.
  // Leaving it around in case anyone's using it
 
  Modernizr.addTest('datalistelem', Modernizr.input.list);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/details.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/details.js

Statements: 7.69% (1 / 13)      Branches: 0% (0 / 2)      Functions: 0% (0 / 3)      Lines: 7.69% (1 / 13)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38                            2                                              
/*!
{
  "name": "details Element",
  "caniuse": "details",
  "property": "details",
  "tags": ["elem"],
  "builderAliases": ["elem_details"],
  "authors": ["@mathias"],
  "notes": [{
    "name": "Mathias' Original",
    "href": "https://mathiasbynens.be/notes/html5-details-jquery#comment-35"
  }]
}
!*/
define(['Modernizr', 'createElement', 'docElement', 'testStyles'], function(Modernizr, createElement, docElement, testStyles) {
  Modernizr.addTest('details', function() {
    var el = createElement('details');
    var diff;
 
    // return early if possible; thanks @aFarkas!
    if (!('open' in el)) {
      return false;
    }
 
    testStyles('#modernizr details{display:block}', function(node) {
      node.appendChild(el);
      el.innerHTML = '<summary>a</summary>b';
      diff = el.offsetHeight;
      el.open = true;
      diff = diff != el.offsetHeight;
    });
 
 
    return diff;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/output.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/output.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17                        2        
/*!
{
  "name": "output Element",
  "property": "outputelem",
  "tags": ["elem"],
  "builderAliases": ["elem_output"],
  "notes": [{
    "name": "WhatWG Spec",
    "href": "https://html.spec.whatwg.org/multipage/forms.html#the-output-element"
  }]
}
!*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('outputelem', 'value' in createElement('output'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/picture.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/picture.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20                              2        
/*!
{
  "name": "picture Element",
  "property": "picture",
  "tags": ["elem"],
  "authors": ["Scott Jehl", "Mat Marquis"],
  "notes": [{
    "name": "Specification",
    "href": "http://picture.responsiveimages.org"
  },{
    "name": "Relevant spec issue",
    "href": "https://github.com/ResponsiveImagesCG/picture-element/issues/87"
  }]
}
!*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('picture', 'HTMLPictureElement' in window);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/progress-meter.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/progress-meter.js

Statements: 33.33% (1 / 3)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19                    2                
/*!
{
  "name": "progress Element",
  "caniuse": "progress",
  "property": ["progressbar", "meter"],
  "tags": ["elem"],
  "builderAliases": ["elem_progress_meter"],
  "authors": ["Stefan Wallin"]
}
!*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  // Tests for progressbar-support. All browsers that don't support progressbar returns undefined =)
  Modernizr.addTest('progressbar', createElement('progress').max !== undefined);
 
  // Tests for meter-support. All browsers that don't support meters returns undefined =)
  Modernizr.addTest('meter', createElement('meter').max !== undefined);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/ruby.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/ruby.js

Statements: 11.11% (3 / 27)      Branches: 0% (0 / 11)      Functions: 0% (0 / 4)      Lines: 11.11% (3 / 27)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67                            2                                                       1                       1                        
/*!
{
  "name": "ruby, rp, rt Elements",
  "caniuse": "ruby",
  "property": "ruby",
  "tags": ["elem"],
  "builderAliases": ["elem_ruby"],
  "authors": ["Cătălin Mariș"],
  "notes": [{
    "name": "WHATWG Specification",
    "href": "https://html.spec.whatwg.org/multipage/semantics.html#the-ruby-element"
  }]
}
!*/
define(['Modernizr', 'createElement', 'docElement'], function(Modernizr, createElement, docElement) {
  Modernizr.addTest('ruby', function() {
 
    var ruby = createElement('ruby');
    var rt = createElement('rt');
    var rp = createElement('rp');
    var displayStyleProperty = 'display';
    // 'fontSize' - because it`s only used for IE6 and IE7
    var fontSizeStyleProperty = 'fontSize';
 
    ruby.appendChild(rp);
    ruby.appendChild(rt);
    docElement.appendChild(ruby);
 
    // browsers that support <ruby> hide the <rp> via "display:none"
    if (getStyle(rp, displayStyleProperty) == 'none' ||                                                        // for non-IE browsers
         // but in IE browsers <rp> has "display:inline" so, the test needs other conditions:
         getStyle(ruby, displayStyleProperty) == 'ruby' && getStyle(rt, displayStyleProperty) == 'ruby-text' || // for IE8+
         getStyle(rp, fontSizeStyleProperty) == '6pt' && getStyle(rt, fontSizeStyleProperty) == '6pt') {       // for IE6 & IE7
 
      cleanUp();
      return true;
 
    } else {
      cleanUp();
      return false;
    }
 
    function getStyle(element, styleProperty) {
      var result;
 
      if (window.getComputedStyle) {     // for non-IE browsers
        result = document.defaultView.getComputedStyle(element, null).getPropertyValue(styleProperty);
      } else if (element.currentStyle) { // for IE
        result = element.currentStyle[styleProperty];
      }
 
      return result;
    }
 
    function cleanUp() {
      docElement.removeChild(ruby);
      // the removed child node still exists in memory, so ...
      ruby = null;
      rt = null;
      rp = null;
    }
 
  });
 
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/template.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/template.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19                            2        
/*!
{
  "name": "Template Tag",
  "property": "template",
  "tags": ["elem"],
  "notes": [{
    "name": "HTML5Rocks Article",
    "href": "http://www.html5rocks.com/en/tutorials/webcomponents/template/"
  },{
    "name": "W3 Spec",
    "href": "https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/index.html"
  }]
}
!*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('template', 'content' in createElement('template'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/time.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/time.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17                        2        
/*!
{
  "name": "time Element",
  "property": "time",
  "tags": ["elem"],
  "builderAliases": ["elem_time"],
  "notes": [{
    "name": "WhatWG Spec",
    "href": "https://html.spec.whatwg.org/multipage/semantics.html#the-time-element"
  }]
}
!*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('time', 'valueAsDate' in createElement('time'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/track.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/track.js

Statements: 33.33% (1 / 3)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25                                  2              
/*!
{
  "name": "Track element and Timed Text Track",
  "property": ["texttrackapi", "track"],
  "tags": ["elem"],
  "builderAliases": ["elem_track"],
  "authors": ["Addy Osmani"],
  "notes": [{
    "name": "W3 track Element Spec",
    "href": "http://www.w3.org/TR/html5/video.html#the-track-element"
  },{
    "name": "W3 track API Spec",
    "href": "http://www.w3.org/TR/html5/media-elements.html#text-track-api"
  }],
  "warnings": ["While IE10 has implemented the track element, IE10 does not expose the underlying APIs to create timed text tracks by JS (really sad)"]
}
!*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('texttrackapi', typeof (createElement('video').addTextTrack) === 'function');
 
  // a more strict test for track including UI support: document.createElement('track').kind === 'subtitles'
  Modernizr.addTest('track', 'kind' in createElement('track'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/unknown.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/elem/unknown.js

Statements: 20% (1 / 5)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 20% (1 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28                                      2                
/*!
{
  "name": "Unknown Elements",
  "property": "unknownelements",
  "tags": ["elem"],
  "notes": [{
    "name": "The Story of the HTML5 Shiv",
    "href": "https://www.paulirish.com/2011/the-history-of-the-html5-shiv/"
  }, {
    "name": "original implementation of detect code",
    "href": "https://github.com/aFarkas/html5shiv/blob/bf4fcc4/src/html5shiv.js#L36"
  }],
  "polyfills": ["html5shiv"],
  "authors": ["Ron Waldon (@jokeyrhyme)"]
}
!*/
/* DOC
Does the browser support HTML with non-standard / new elements?
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('unknownelements', function() {
    var a = createElement('a');
    a.innerHTML = '<xyz></xyz>';
    return a.childNodes.length === 1;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es5/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es5/

Statements: 19.15% (9 / 47)      Branches: 0% (0 / 47)      Functions: 0% (0 / 18)      Lines: 19.57% (9 / 46)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/es5/
File Statements Branches Functions Lines
array.js 33.33% (1 / 3) 0% (0 / 11) 0% (0 / 2) 33.33% (1 / 3)
date.js 16.67% (1 / 6) 0% (0 / 5) 0% (0 / 2) 16.67% (1 / 6)
function.js 33.33% (1 / 3) 0% (0 / 2) 0% (0 / 2) 33.33% (1 / 3)
object.js 33.33% (1 / 3) 0% (0 / 13) 0% (0 / 2) 33.33% (1 / 3)
specification.js 33.33% (1 / 3) 0% (0 / 9) 0% (0 / 2) 33.33% (1 / 3)
strictmode.js 33.33% (1 / 3) 100% (0 / 0) 0% (0 / 2) 50% (1 / 2)
string.js 33.33% (1 / 3) 0% (0 / 2) 0% (0 / 2) 33.33% (1 / 3)
syntax.js 7.69% (1 / 13) 0% (0 / 5) 0% (0 / 2) 7.69% (1 / 13)
undefined.js 10% (1 / 10) 100% (0 / 0) 0% (0 / 2) 10% (1 / 10)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es5/array.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es5/array.js

Statements: 33.33% (1 / 3)      Branches: 0% (0 / 11)      Functions: 0% (0 / 2)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33                                2                                
/*!
{
  "name": "ES5 Array",
  "property": "es5array",
  "notes": [{
    "name": "ECMAScript 5.1 Language Specification",
    "href": "http://www.ecma-international.org/ecma-262/5.1/"
  }],
  "polyfills": ["es5shim"],
  "authors": ["Ron Waldon (@jokeyrhyme)"],
  "tags": ["es5"]
}
!*/
/* DOC
Check if browser implements ECMAScript 5 Array per specification.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('es5array', function() {
    return !!(Array.prototype &&
      Array.prototype.every &&
      Array.prototype.filter &&
      Array.prototype.forEach &&
      Array.prototype.indexOf &&
      Array.prototype.lastIndexOf &&
      Array.prototype.map &&
      Array.prototype.some &&
      Array.prototype.reduce &&
      Array.prototype.reduceRight &&
      Array.isArray);
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es5/date.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es5/date.js

Statements: 16.67% (1 / 6)      Branches: 0% (0 / 5)      Functions: 0% (0 / 2)      Lines: 16.67% (1 / 6)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34                                2                                  
/*!
{
  "name": "ES5 Date",
  "property": "es5date",
  "notes": [{
    "name": "ECMAScript 5.1 Language Specification",
    "href": "http://www.ecma-international.org/ecma-262/5.1/"
  }],
  "polyfills": ["es5shim"],
  "authors": ["Ron Waldon (@jokeyrhyme)"],
  "tags": ["es5"]
}
!*/
/* DOC
Check if browser implements ECMAScript 5 Date per specification.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('es5date', function() {
    var isoDate = '2013-04-12T06:06:37.307Z',
      canParseISODate = false;
    try {
      canParseISODate = !!Date.parse(isoDate);
    } catch (e) {
      // no ISO date parsing yet
    }
    return !!(Date.now &&
      Date.prototype &&
      Date.prototype.toISOString &&
      Date.prototype.toJSON &&
      canParseISODate);
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es5/function.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es5/function.js

Statements: 33.33% (1 / 3)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23                                2            
/*!
{
  "name": "ES5 Function",
  "property": "es5function",
  "notes": [{
    "name": "ECMAScript 5.1 Language Specification",
    "href": "http://www.ecma-international.org/ecma-262/5.1/"
  }],
  "polyfills": ["es5shim"],
  "authors": ["Ron Waldon (@jokeyrhyme)"],
  "tags": ["es5"]
}
!*/
/* DOC
Check if browser implements ECMAScript 5 Function per specification.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('es5function', function() {
    return !!(Function.prototype && Function.prototype.bind);
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es5/object.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es5/object.js

Statements: 33.33% (1 / 3)      Branches: 0% (0 / 13)      Functions: 0% (0 / 2)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35                                2                                    
/*!
{
  "name": "ES5 Object",
  "property": "es5object",
  "notes": [{
    "name": "ECMAScript 5.1 Language Specification",
    "href": "http://www.ecma-international.org/ecma-262/5.1/"
  }],
  "polyfills": ["es5shim", "es5sham"],
  "authors": ["Ron Waldon (@jokeyrhyme)"],
  "tags": ["es5"]
}
!*/
/* DOC
Check if browser implements ECMAScript 5 Object per specification.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('es5object', function() {
    return !!(Object.keys &&
      Object.create &&
      Object.getPrototypeOf &&
      Object.getOwnPropertyNames &&
      Object.isSealed &&
      Object.isFrozen &&
      Object.isExtensible &&
      Object.getOwnPropertyDescriptor &&
      Object.defineProperty &&
      Object.defineProperties &&
      Object.seal &&
      Object.freeze &&
      Object.preventExtensions);
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es5/specification.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es5/specification.js

Statements: 33.33% (1 / 3)      Branches: 0% (0 / 9)      Functions: 0% (0 / 2)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33                                2                                
/*!
{
  "name": "ES5",
  "property": "es5",
  "notes": [{
    "name": "ECMAScript 5.1 Language Specification",
    "href": "http://www.ecma-international.org/ecma-262/5.1/"
  }],
  "polyfills": ["es5shim", "es5sham"],
  "authors": ["Ron Waldon (@jokeyrhyme)"],
  "tags": ["es5"]
}
!*/
/* DOC
Check if browser implements everything as specified in ECMAScript 5.
*/
define(['Modernizr', 'test/es5/array', 'test/es5/date', 'test/es5/function', 'test/es5/object', 'test/es5/strictmode', 'test/es5/string', 'test/json', 'test/es5/syntax', 'test/es5/undefined'], function(Modernizr) {
  Modernizr.addTest('es5', function() {
    return !!(
      Modernizr.es5array &&
      Modernizr.es5date &&
      Modernizr.es5function &&
      Modernizr.es5object &&
      Modernizr.strictmode &&
      Modernizr.es5string &&
      Modernizr.json &&
      Modernizr.es5syntax &&
      Modernizr.es5undefined
    );
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es5/strictmode.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es5/strictmode.js

Statements: 33.33% (1 / 3)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22                                  2        
/*!
{
  "name": "ES5 Strict Mode",
  "property": "strictmode",
  "caniuse": "sctrict-mode",
  "notes": [{
    "name": "ECMAScript 5.1 Language Specification",
    "href": "http://www.ecma-international.org/ecma-262/5.1/"
  }],
  "authors": ["@kangax"],
  "tags": ["es5"],
  "builderAliases": ["es5_strictmode"]
}
!*/
/* DOC
Check if browser implements ECMAScript 5 Object strict mode.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('strictmode', (function() {'use strict'; return !this; })());
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es5/string.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es5/string.js

Statements: 33.33% (1 / 3)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23                                2            
/*!
{
  "name": "ES5 String",
  "property": "es5string",
  "notes": [{
    "name": "ECMAScript 5.1 Language Specification",
    "href": "http://www.ecma-international.org/ecma-262/5.1/"
  }],
  "polyfills": ["es5shim"],
  "authors": ["Ron Waldon (@jokeyrhyme)"],
  "tags": ["es5"]
}
!*/
/* DOC
Check if browser implements ECMAScript 5 String per specification.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('es5string', function() {
    return !!(String.prototype && String.prototype.trim);
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es5/syntax.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es5/syntax.js

Statements: 7.69% (1 / 13)      Branches: 0% (0 / 5)      Functions: 0% (0 / 2)      Lines: 7.69% (1 / 13)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45                                      2                                                  
/*!
{
  "name": "ES5 Syntax",
  "property": "es5syntax",
  "notes": [{
    "name": "ECMAScript 5.1 Language Specification",
    "href": "http://www.ecma-international.org/ecma-262/5.1/"
  }, {
    "name": "original implementation of detect code",
    "href": "http://kangax.github.io/es5-compat-table/"
  }],
  "authors": ["Ron Waldon (@jokeyrhyme)"],
  "warnings": ["This detect uses `eval()`, so CSP may be a problem."],
  "tags": ["es5"]
}
!*/
/* DOC
Check if browser accepts ECMAScript 5 syntax.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('es5syntax', function() {
    var value, obj, stringAccess, getter, setter, reservedWords, zeroWidthChars;
    try {
      /* eslint no-eval: "off" */
      // Property access on strings
      stringAccess = eval('"foobar"[3] === "b"');
      // Getter in property initializer
      getter = eval('({ get x(){ return 1 } }).x === 1');
      eval('({ set x(v){ value = v; } }).x = 1');
      // Setter in property initializer
      setter = value === 1;
      // Reserved words as property names
      eval('obj = ({ if: 1 })');
      reservedWords = obj['if'] === 1;
      // Zero-width characters in identifiers
      zeroWidthChars = eval('_\u200c\u200d = true');
 
      return stringAccess && getter && setter && reservedWords && zeroWidthChars;
    } catch (ignore) {
      return false;
    }
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es5/undefined.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es5/undefined.js

Statements: 10% (1 / 10)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 10% (1 / 10)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34                                    2                              
/*!
{
  "name": "ES5 Immutable Undefined",
  "property": "es5undefined",
  "notes": [{
    "name": "ECMAScript 5.1 Language Specification",
    "href": "http://www.ecma-international.org/ecma-262/5.1/"
  }, {
    "name": "original implementation of detect code",
    "href": "http://kangax.github.io/es5-compat-table/"
  }],
  "authors": ["Ron Waldon (@jokeyrhyme)"],
  "tags": ["es5"]
}
!*/
/* DOC
Check if browser prevents assignment to global `undefined` per ECMAScript 5.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('es5undefined', function() {
    var result, originalUndefined;
    try {
      originalUndefined = window.undefined;
      window.undefined = 12345;
      result = typeof window.undefined === 'undefined';
      window.undefined = originalUndefined;
    } catch (e) {
      return false;
    }
    return result;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es6/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es6/

Statements: 30.3% (10 / 33)      Branches: 0% (0 / 57)      Functions: 0% (0 / 15)      Lines: 31.25% (10 / 32)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/es6/
File Statements Branches Functions Lines
array.js 50% (1 / 2) 0% (0 / 10) 0% (0 / 1) 50% (1 / 2)
arrow.js 16.67% (1 / 6) 100% (0 / 0) 0% (0 / 2) 16.67% (1 / 6)
collections.js 50% (1 / 2) 0% (0 / 4) 0% (0 / 1) 50% (1 / 2)
contains.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
generators.js 16.67% (1 / 6) 100% (0 / 0) 0% (0 / 2) 16.67% (1 / 6)
math.js 50% (1 / 2) 0% (0 / 18) 0% (0 / 1) 50% (1 / 2)
number.js 50% (1 / 2) 0% (0 / 9) 0% (0 / 1) 50% (1 / 2)
object.js 50% (1 / 2) 0% (0 / 3) 0% (0 / 1) 50% (1 / 2)
promises.js 14.29% (1 / 7) 0% (0 / 6) 0% (0 / 4) 16.67% (1 / 6)
string.js 50% (1 / 2) 0% (0 / 7) 0% (0 / 1) 50% (1 / 2)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es6/array.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es6/array.js

Statements: 50% (1 / 2)      Branches: 0% (0 / 10)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31                                  2                          
/*!
{
  "name": "ES6 Array",
  "property": "es6array",
  "notes": [{
    "name": "unofficial ECMAScript 6 draft specification",
    "href": "https://people.mozilla.org/~jorendorff/es6-draft.html"
  }],
  "polyfills": ["es6shim"],
  "authors": ["Ron Waldon (@jokeyrhyme)"],
  "warnings": ["ECMAScript 6 is still a only a draft, so this detect may not match the final specification or implementations."],
  "tags": ["es6"]
}
!*/
/* DOC
Check if browser implements ECMAScript 6 Array per specification.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('es6array', !!(Array.prototype &&
    Array.prototype.copyWithin &&
    Array.prototype.fill &&
    Array.prototype.find &&
    Array.prototype.findIndex &&
    Array.prototype.keys &&
    Array.prototype.entries &&
    Array.prototype.values &&
    Array.from &&
    Array.of));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es6/arrow.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es6/arrow.js

Statements: 16.67% (1 / 6)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 16.67% (1 / 6)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24                      2                        
/*!
{
  "name": "ES6 Arrow Functions",
  "property": "arrow",
  "authors": ["Vincent Riemer"],
  "tags": ["es6"]
}
!*/
/* DOC
Check if browser implements ECMAScript 6 Arrow Functions per specification.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('arrow', function() {
    try {
      // eslint-disable-next-line
      eval('()=>{}');
    } catch (e) {
      return false;
    }
    return true;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es6/collections.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es6/collections.js

Statements: 50% (1 / 2)      Branches: 0% (0 / 4)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24                                  2            
/*!
{
  "name": "ES6 Collections",
  "property": "es6collections",
  "notes": [{
    "name": "unofficial ECMAScript 6 draft specification",
    "href": "https://people.mozilla.org/~jorendorff/es6-draft.html"
  }],
  "polyfills": ["es6shim", "weakmap"],
  "authors": ["Ron Waldon (@jokeyrhyme)"],
  "warnings": ["ECMAScript 6 is still a only a draft, so this detect may not match the final specification or implementations."],
  "tags": ["es6"]
}
!*/
/* DOC
Check if browser implements ECMAScript 6 Map, Set, WeakMap and WeakSet
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('es6collections', !!(
    window.Map && window.Set && window.WeakMap && window.WeakSet
  ));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es6/contains.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es6/contains.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16                      2        
/*!
{
  "name": "ES5 String.prototype.contains",
  "property": "contains",
  "authors": ["Robert Kowalski"],
  "tags": ["es6"]
}
!*/
/* DOC
Check if browser implements ECMAScript 6 `String.prototype.contains` per specification.
*/
define(['Modernizr', 'is'], function(Modernizr, is) {
  Modernizr.addTest('contains', is(String.prototype.contains, 'function'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es6/generators.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es6/generators.js

Statements: 16.67% (1 / 6)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 16.67% (1 / 6)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23                      2                      
/*!
{
  "name": "ES6 Generators",
  "property": "generators",
  "authors": ["Michael Kachanovskyi"],
  "tags": ["es6"]
}
!*/
/* DOC
Check if browser implements ECMAScript 6 Generators per specification.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('generators', function() {
    try {
      new Function('function* test() {}')();
    } catch (e) {
      return false;
    }
    return true;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es6/math.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es6/math.js

Statements: 50% (1 / 2)      Branches: 0% (0 / 18)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39                                  2                                          
/*!
{
  "name": "ES6 Math",
  "property": "es6math",
  "notes": [{
    "name": "unofficial ECMAScript 6 draft specification",
    "href": "https://people.mozilla.org/~jorendorff/es6-draft.html"
  }],
  "polyfills": ["es6shim"],
  "authors": ["Ron Waldon (@jokeyrhyme)"],
  "warnings": ["ECMAScript 6 is still a only a draft, so this detect may not match the final specification or implementations."],
  "tags": ["es6"]
}
!*/
/* DOC
Check if browser implements ECMAScript 6 Math per specification.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('es6math', !!(Math &&
    Math.clz32 &&
    Math.cbrt &&
    Math.imul &&
    Math.sign &&
    Math.log10 &&
    Math.log2 &&
    Math.log1p &&
    Math.expm1 &&
    Math.cosh &&
    Math.sinh &&
    Math.tanh &&
    Math.acosh &&
    Math.asinh &&
    Math.atanh &&
    Math.hypot &&
    Math.trunc &&
    Math.fround));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es6/number.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es6/number.js

Statements: 50% (1 / 2)      Branches: 0% (0 / 9)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30                                  2                        
/*!
{
  "name": "ES6 Number",
  "property": "es6number",
  "notes": [{
    "name": "unofficial ECMAScript 6 draft specification",
    "href": "https://people.mozilla.org/~jorendorff/es6-draft.html"
  }],
  "polyfills": ["es6shim"],
  "authors": ["Ron Waldon (@jokeyrhyme)"],
  "warnings": ["ECMAScript 6 is still a only a draft, so this detect may not match the final specification or implementations."],
  "tags": ["es6"]
}
!*/
/* DOC
Check if browser implements ECMAScript 6 Number per specification.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('es6number', !!(Number.isFinite &&
    Number.isInteger &&
    Number.isSafeInteger &&
    Number.isNaN &&
    Number.parseInt &&
    Number.parseFloat &&
    Number.isInteger(Number.MAX_SAFE_INTEGER) &&
    Number.isInteger(Number.MIN_SAFE_INTEGER) &&
    Number.isFinite(Number.EPSILON)));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es6/object.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es6/object.js

Statements: 50% (1 / 2)      Branches: 0% (0 / 3)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24                                  2            
/*!
{
  "name": "ES6 Object",
  "property": "es6object",
  "notes": [{
    "name": "unofficial ECMAScript 6 draft specification",
    "href": "https://people.mozilla.org/~jorendorff/es6-draft.html"
  }],
  "polyfills": ["es6shim"],
  "authors": ["Ron Waldon (@jokeyrhyme)"],
  "warnings": ["ECMAScript 6 is still a only a draft, so this detect may not match the final specification or implementations."],
  "tags": ["es6"]
}
!*/
/* DOC
Check if browser implements ECMAScript 6 Object per specification.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('es6object', !!(Object.assign &&
    Object.is &&
    Object.setPrototypeOf));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es6/promises.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es6/promises.js

Statements: 14.29% (1 / 7)      Branches: 0% (0 / 6)      Functions: 0% (0 / 4)      Lines: 16.67% (1 / 6)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43                                              2                                      
/*!
{
  "name": "ES6 Promises",
  "property": "promises",
  "caniuse": "promises",
  "polyfills": ["es6promises"],
  "authors": ["Krister Kari", "Jake Archibald"],
  "tags": ["es6"],
  "notes": [{
    "name": "The ES6 promises spec",
    "href": "https://github.com/domenic/promises-unwrapping"
  },{
    "name": "Chromium dashboard - ES6 Promises",
    "href": "https://www.chromestatus.com/features/5681726336532480"
  },{
    "name": "JavaScript Promises: There and back again - HTML5 Rocks",
    "href": "http://www.html5rocks.com/en/tutorials/es6/promises/"
  }]
}
!*/
/* DOC
Check if browser implements ECMAScript 6 Promises per specification.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('promises', function() {
    return 'Promise' in window &&
    // Some of these methods are missing from
    // Firefox/Chrome experimental implementations
    'resolve' in window.Promise &&
    'reject' in window.Promise &&
    'all' in window.Promise &&
    'race' in window.Promise &&
    // Older version of the spec had a resolver object
    // as the arg rather than a function
    (function() {
      var resolve;
      new window.Promise(function(r) { resolve = r; });
      return typeof resolve === 'function';
    }());
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es6/string.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/es6/string.js

Statements: 50% (1 / 2)      Branches: 0% (0 / 7)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28                                  2                    
/*!
{
  "name": "ES6 String",
  "property": "es6string",
  "notes": [{
    "name": "unofficial ECMAScript 6 draft specification",
    "href": "https://people.mozilla.org/~jorendorff/es6-draft.html"
  }],
  "polyfills": ["es6shim"],
  "authors": ["Ron Waldon (@jokeyrhyme)"],
  "warnings": ["ECMAScript 6 is still a only a draft, so this detect may not match the final specification or implementations."],
  "tags": ["es6"]
}
!*/
/* DOC
Check if browser implements ECMAScript 6 String per specification.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('es6string', !!(String.fromCodePoint &&
    String.raw &&
    String.prototype.codePointAt &&
    String.prototype.repeat &&
    String.prototype.startsWith &&
    String.prototype.endsWith &&
    String.prototype.includes));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/event/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/event/

Statements: 7.69% (2 / 26)      Branches: 0% (0 / 4)      Functions: 0% (0 / 4)      Lines: 7.69% (2 / 26)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/event/
File Statements Branches Functions Lines
deviceorientation-motion.js 33.33% (1 / 3) 100% (0 / 0) 0% (0 / 1) 33.33% (1 / 3)
oninput.js 4.35% (1 / 23) 0% (0 / 4) 0% (0 / 3) 4.35% (1 / 23)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/event/deviceorientation-motion.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/event/deviceorientation-motion.js

Statements: 33.33% (1 / 3)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33                                                      2          
/*!
{
  "name": "Orientation and Motion Events",
  "property": ["devicemotion", "deviceorientation"],
  "caniuse": "deviceorientation",
  "notes": [{
    "name": "W3C Editor's Draft",
    "href": "http://w3c.github.io/deviceorientation/spec-source-orientation.html"
  },{
    "name": "Implementation by iOS Safari (Orientation)",
    "href": "http://goo.gl/fhce3"
  },{
    "name": "Implementation by iOS Safari (Motion)",
    "href": "http://goo.gl/rLKz8"
  }],
  "authors": ["Shi Chuan"],
  "tags": ["event"],
  "builderAliases": ["event_deviceorientation_motion"]
}
!*/
/* DOC
Part of Device Access aspect of HTML5, same category as geolocation.
 
`devicemotion` tests for Device Motion Event support, returns boolean value true/false.
 
`deviceorientation` tests for Device Orientation Event support, returns boolean value true/false
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('devicemotion', 'DeviceMotionEvent' in window);
  Modernizr.addTest('deviceorientation', 'DeviceOrientationEvent' in window);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/event/oninput.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/event/oninput.js

Statements: 4.35% (1 / 23)      Branches: 0% (0 / 4)      Functions: 0% (0 / 3)      Lines: 4.35% (1 / 23)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60                                          2                                                                            
/*!
{
  "name": "onInput Event",
  "property": "oninput",
  "notes": [{
    "name": "MDN article",
    "href": "https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers.oninput"
  },{
    "name": "WHATWG spec",
    "href": "https://html.spec.whatwg.org/multipage/forms.html#common-input-element-attributes"
  },{
    "name": "Detecting onInput support",
    "href": "http://danielfriesen.name/blog/2010/02/16/html5-browser-maze-oninput-support"
  }],
  "authors": ["Patrick Kettner"],
  "tags": ["event"]
}
!*/
/* DOC
`oninput` tests if the browser is able to detect the input event
*/
define(['Modernizr', 'docElement', 'createElement', 'testStyles', 'hasEvent'], function(Modernizr, docElement, createElement, testStyles, hasEvent) {
 
  Modernizr.addTest('oninput', function() {
    var input = createElement('input');
    var supportsOnInput;
    input.setAttribute('oninput', 'return');
 
    if (hasEvent('oninput', docElement) || typeof input.oninput == 'function') {
      return true;
    }
 
    // IE doesn't support onInput, so we wrap up the non IE APIs
    // (createEvent, addEventListener) in a try catch, rather than test for
    // their trident equivalent.
    try {
      // Older Firefox didn't map oninput attribute to oninput property
      var testEvent  = document.createEvent('KeyboardEvent');
      supportsOnInput = false;
      var handler = function(e) {
        supportsOnInput = true;
        e.preventDefault();
        e.stopPropagation();
      };
 
      testEvent.initKeyEvent('keypress', true, true, window, false, false, false, false, 0, 'e'.charCodeAt(0));
      docElement.appendChild(input);
      input.addEventListener('input', handler, false);
      input.focus();
      input.dispatchEvent(testEvent);
      input.removeEventListener('input', handler, false);
      docElement.removeChild(input);
    } catch (e) {
      supportsOnInput = false;
    }
    return supportsOnInput;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/file/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/file/

Statements: 50% (2 / 4)      Branches: 0% (0 / 3)      Functions: 0% (0 / 2)      Lines: 50% (2 / 4)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/file/
File Statements Branches Functions Lines
api.js 50% (1 / 2) 0% (0 / 3) 0% (0 / 1) 50% (1 / 2)
filesystem.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/file/api.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/file/api.js

Statements: 50% (1 / 2)      Branches: 0% (0 / 3)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26                                          2        
/*!
{
  "name": "File API",
  "property": "filereader",
  "caniuse": "fileapi",
  "notes": [{
    "name": "W3C Working Draft",
    "href": "https://www.w3.org/TR/FileAPI/"
  }],
  "tags": ["file"],
  "builderAliases": ["file_api"],
  "knownBugs": ["Will fail in Safari 5 due to its lack of support for the standards defined FileReader object"]
}
!*/
/* DOC
`filereader` tests for the File API specification
 
Tests for objects specific to the File API W3C specification without
being redundant (don't bother testing for Blob since it is assumed
to be the File object's prototype.)
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('filereader', !!(window.File && window.FileList && window.FileReader));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/file/filesystem.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/file/filesystem.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20                              2        
/*!
{
  "name": "Filesystem API",
  "property": "filesystem",
  "caniuse": "filesystem",
  "notes": [{
    "name": "W3 Draft",
    "href": "http://dev.w3.org/2009/dap/file-system/file-dir-sys.html"
  }],
  "authors": ["Eric Bidelman (@ebidel)"],
  "tags": ["file"],
  "builderAliases": ["file_filesystem"],
  "knownBugs": ["The API will be present in Chrome incognito, but will throw an exception. See crbug.com/93417"]
}
!*/
define(['Modernizr', 'prefixed'], function(Modernizr, prefixed) {
  Modernizr.addTest('filesystem', !!prefixed('requestFileSystem', window));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/forms/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/forms/

Statements: 8.7% (8 / 92)      Branches: 0% (0 / 34)      Functions: 0% (0 / 17)      Lines: 8.89% (8 / 90)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/forms/
File Statements Branches Functions Lines
capture.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
fileinput.js 14.29% (1 / 7) 0% (0 / 2) 0% (0 / 2) 14.29% (1 / 7)
fileinputdirectory.js 10% (1 / 10) 0% (0 / 4) 0% (0 / 2) 10% (1 / 10)
formattribute.js 4.76% (1 / 21) 0% (0 / 5) 0% (0 / 2) 4.76% (1 / 21)
inputnumber-l10n.js 4.35% (1 / 23) 0% (0 / 11) 0% (0 / 3) 4.76% (1 / 21)
placeholder.js 50% (1 / 2) 0% (0 / 2) 0% (0 / 1) 50% (1 / 2)
requestautocomplete.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
validation.js 4% (1 / 25) 0% (0 / 10) 0% (0 / 5) 4% (1 / 25)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/forms/capture.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/forms/capture.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20                            2          
/*!
{
  "name": "input[capture] Attribute",
  "property": "capture",
  "tags": ["video", "image", "audio", "media", "attribute"],
  "notes": [{
    "name": "W3C draft: HTML Media Capture",
    "href": "https://www.w3.org/TR/html-media-capture/"
  }]
}
!*/
/* DOC
When used on an `<input>`, this attribute signifies that the resource it takes should be generated via device's camera, camcorder, sound recorder.
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  // testing for capture attribute in inputs
  Modernizr.addTest('capture', ('capture' in createElement('input')));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/forms/fileinput.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/forms/fileinput.js

Statements: 14.29% (1 / 7)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 14.29% (1 / 7)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26                            2                      
/*!
{
  "name": "input[file] Attribute",
  "property": "fileinput",
  "caniuse" : "forms",
  "tags": ["file", "forms", "input"],
  "builderAliases": ["forms_fileinput"]
}
!*/
/* DOC
Detects whether input type="file" is available on the platform
 
E.g. iOS < 6 and some android version don't support this
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('fileinput', function() {
    if (navigator.userAgent.match(/(Android (1.0|1.1|1.5|1.6|2.0|2.1))|(Windows Phone (OS 7|8.0))|(XBLWP)|(ZuneWP)|(w(eb)?OSBrowser)|(webOS)|(Kindle\/(1.0|2.0|2.5|3.0))/)) {
      return false;
    }
    var elem = createElement('input');
    elem.type = 'file';
    return !elem.disabled;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/forms/fileinputdirectory.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/forms/fileinputdirectory.js

Statements: 10% (1 / 10)      Branches: 0% (0 / 4)      Functions: 0% (0 / 2)      Lines: 10% (1 / 10)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31                          2                                  
/*!
{
  "name": "input[directory] Attribute",
  "property": "directory",
  "authors": ["silverwind"],
  "tags": ["file", "input", "attribute"]
}
!*/
/* DOC
When used on an `<input type="file">`, the `directory` attribute instructs
the user agent to present a directory selection dialog instead of the usual
file selection dialog.
*/
define(['Modernizr', 'createElement', 'domPrefixes'], function(Modernizr, createElement, domPrefixes) {
  Modernizr.addTest('fileinputdirectory', function() {
    var elem = createElement('input'), dir = 'directory';
    elem.type = 'file';
    if (dir in elem) {
      return true;
    } else {
      for (var i = 0, len = domPrefixes.length; i < len; i++) {
        if (domPrefixes[i] + dir in elem) {
          return true;
        }
      }
    }
    return false;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/forms/formattribute.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/forms/formattribute.js

Statements: 4.76% (1 / 21)      Branches: 0% (0 / 5)      Functions: 0% (0 / 2)      Lines: 4.76% (1 / 21)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49                        2                                                                        
/*!
{
  "name": "input[form] Attribute",
  "property": "formattribute",
  "tags": ["attribute", "forms", "input"],
  "builderAliases": ["forms_formattribute"]
}
!*/
/* DOC
Detects whether input form="form_id" is available on the platform
E.g. IE 10 (and below), don't support this
*/
define(['Modernizr', 'createElement', 'docElement'], function(Modernizr, createElement, docElement) {
 
  Modernizr.addTest('formattribute', function() {
    var form = createElement('form');
    var input = createElement('input');
    var div = createElement('div');
    var id = 'formtest' + (new Date()).getTime();
    var attr;
    var bool = false;
 
    form.id = id;
 
    //IE6/7 confuses the form idl attribute and the form content attribute, so we use document.createAttribute
    try {
      input.setAttribute('form', id);
    }
    catch (e) {
      if (document.createAttribute) {
        attr = document.createAttribute('form');
        attr.nodeValue = id;
        input.setAttributeNode(attr);
      }
    }
 
    div.appendChild(form);
    div.appendChild(input);
 
    docElement.appendChild(div);
 
    bool = form.elements && form.elements.length === 1 && input.form == form;
 
    div.parentNode.removeChild(div);
    return bool;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/forms/inputnumber-l10n.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/forms/inputnumber-l10n.js

Statements: 4.35% (1 / 23)      Branches: 0% (0 / 11)      Functions: 0% (0 / 3)      Lines: 4.76% (1 / 21)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53                                      2                                                                  
/*!
{
  "name": "input[type=\"number\"] Localization",
  "property": "localizednumber",
  "tags": ["forms", "localization", "attribute"],
  "authors": ["Peter Janes"],
  "notes": [{
    "name": "Webkit Bug Tracker Listing",
    "href": "https://bugs.webkit.org/show_bug.cgi?id=42484"
  },{
    "name": "Based on This",
    "href": "https://trac.webkit.org/browser/trunk/LayoutTests/fast/forms/script-tests/input-number-keyoperation.js?rev=80096#L9"
  }],
  "knownBugs": ["Only ever returns true if the browser/OS is configured to use comma as a decimal separator. This is probably fine for most use cases."]
}
!*/
/* DOC
Detects whether input type="number" is capable of receiving and displaying localized numbers, e.g. with comma separator.
*/
define(['Modernizr', 'createElement', 'docElement', 'getBody', 'test/inputtypes', 'test/forms/validation'], function(Modernizr, createElement, docElement, getBody) {
  Modernizr.addTest('localizednumber', function() {
    // this extends our testing of input[type=number], so bomb out if that's missing
    if (!Modernizr.inputtypes.number) { return false; }
    // we rely on checkValidity later, so bomb out early if we don't have it
    if (!Modernizr.formvalidation) { return false; }
 
    var el = createElement('div');
    var diff;
    var body = getBody();
 
    var root = (function() {
      return docElement.insertBefore(body, docElement.firstElementChild || docElement.firstChild);
    }());
    el.innerHTML = '<input type="number" value="1.0" step="0.1"/>';
    var input = el.childNodes[0];
    root.appendChild(el);
    input.focus();
    try {
      document.execCommand('SelectAll', false); // Overwrite current input value, rather than appending text
      document.execCommand('InsertText', false, '1,1');
    } catch (e) { // prevent warnings in IE
    }
    diff = input.type === 'number' && input.valueAsNumber === 1.1 && input.checkValidity();
    root.removeChild(el);
    if (body.fake) {
      root.parentNode.removeChild(root);
    }
    return diff;
  });
 
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/forms/placeholder.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/forms/placeholder.js

Statements: 50% (1 / 2)      Branches: 0% (0 / 2)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16                      2        
/*!
{
  "name": "placeholder attribute",
  "property": "placeholder",
  "tags": ["forms", "attribute"],
  "builderAliases": ["forms_placeholder"]
}
!*/
/* DOC
Tests for placeholder attribute in inputs and textareas
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('placeholder', ('placeholder' in createElement('input') && 'placeholder' in createElement('textarea')));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/forms/requestautocomplete.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/forms/requestautocomplete.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20                              2        
/*!
{
  "name": "form#requestAutocomplete()",
  "property": "requestautocomplete",
  "tags": ["form", "forms", "requestAutocomplete", "payments"],
  "notes": [{
    "name": "WHATWG proposed spec",
    "href": "https://wiki.whatwg.org/wiki/RequestAutocomplete"
  }]
}
!*/
/* DOC
When used with input[autocomplete] to annotate a form, form.requestAutocomplete() shows a dialog in Chrome that speeds up
checkout flows (payments specific for now).
*/
define(['Modernizr', 'createElement', 'prefixed'], function(Modernizr, createElement, prefixed) {
  Modernizr.addTest('requestautocomplete', !!prefixed('requestAutocomplete', createElement('form')));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/forms/validation.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/forms/validation.js

Statements: 4% (1 / 25)      Branches: 0% (0 / 10)      Functions: 0% (0 / 5)      Lines: 4% (1 / 25)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69                                2                                                                                                        
/*!
{
  "name": "Form Validation",
  "property": "formvalidation",
  "tags": ["forms", "validation", "attribute"],
  "builderAliases": ["forms_validation"]
}
!*/
/* DOC
This implementation only tests support for interactive form validation.
To check validation for a specific type or a specific other constraint,
the test can be combined:
 
- `Modernizr.inputtypes.number && Modernizr.formvalidation` (browser supports rangeOverflow, typeMismatch etc. for type=number)
- `Modernizr.input.required && Modernizr.formvalidation` (browser supports valueMissing)
*/
define(['Modernizr', 'createElement', 'docElement', 'testStyles'], function(Modernizr, createElement, docElement, testStyles) {
  Modernizr.addTest('formvalidation', function() {
    var form = createElement('form');
    if (!('checkValidity' in form) || !('addEventListener' in form)) {
      return false;
    }
    if ('reportValidity' in form) {
      return true;
    }
    var invalidFired = false;
    var input;
 
    Modernizr.formvalidationapi =  true;
 
    // Prevent form from being submitted
    form.addEventListener('submit', function(e) {
      // Old Presto based Opera does not validate form, if submit is prevented
      // although Opera Mini servers use newer Presto.
      if (!window.opera || window.operamini) {
        e.preventDefault();
      }
      e.stopPropagation();
    }, false);
 
    // Calling form.submit() doesn't trigger interactive validation,
    // use a submit button instead
    //older opera browsers need a name attribute
    form.innerHTML = '<input name="modTest" required="required" /><button></button>';
 
    testStyles('#modernizr form{position:absolute;top:-99999em}', function(node) {
      node.appendChild(form);
 
      input = form.getElementsByTagName('input')[0];
 
      // Record whether "invalid" event is fired
      input.addEventListener('invalid', function(e) {
        invalidFired = true;
        e.preventDefault();
        e.stopPropagation();
      }, false);
 
      //Opera does not fully support the validationMessage property
      Modernizr.formvalidationmessage = !!input.validationMessage;
 
      // Submit form by clicking submit button
      form.getElementsByTagName('button')[0].click();
    });
 
    return invalidFired;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/iframe/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/iframe/

Statements: 50% (3 / 6)      Branches: 100% (0 / 0)      Functions: 0% (0 / 3)      Lines: 50% (3 / 6)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/iframe/
File Statements Branches Functions Lines
sandbox.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
seamless.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
srcdoc.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/iframe/sandbox.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/iframe/sandbox.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22                                  2        
/*!
{
  "name": "iframe[sandbox] Attribute",
  "property": "sandbox",
  "tags": ["iframe"],
  "builderAliases": ["iframe_sandbox"],
  "notes": [
  {
    "name": "WhatWG Spec",
    "href": "https://html.spec.whatwg.org/multipage/embedded-content.html#attr-iframe-sandbox"
  }],
  "knownBugs": [ "False-positive on Firefox < 29" ]
}
!*/
/* DOC
Test for `sandbox` attribute in iframes.
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('sandbox', 'sandbox' in createElement('iframe'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/iframe/seamless.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/iframe/seamless.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20                              2        
/*!
{
  "name": "iframe[seamless] Attribute",
  "property": "seamless",
  "tags": ["iframe"],
  "builderAliases": ["iframe_seamless"],
  "notes": [{
    "name": "WhatWG Spec",
    "href": "https://html.spec.whatwg.org/multipage/embedded-content.html#attr-iframe-seamless"
  }]
}
!*/
/* DOC
Test for `seamless` attribute in iframes.
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('seamless', 'seamless' in createElement('iframe'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/iframe/srcdoc.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/iframe/srcdoc.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20                              2        
/*!
{
  "name": "iframe[srcdoc] Attribute",
  "property": "srcdoc",
  "tags": ["iframe"],
  "builderAliases": ["iframe_srcdoc"],
  "notes": [{
    "name": "WhatWG Spec",
    "href": "https://html.spec.whatwg.org/multipage/embedded-content.html#attr-iframe-srcdoc"
  }]
}
!*/
/* DOC
Test for `srcdoc` attribute in iframes.
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('srcdoc', 'srcdoc' in createElement('iframe'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/img/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/img/

Statements: 13.48% (12 / 89)      Branches: 0% (0 / 22)      Functions: 0% (0 / 32)      Lines: 13.48% (12 / 89)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/img/
File Statements Branches Functions Lines
apng.js 7.14% (1 / 14) 0% (0 / 4) 0% (0 / 4) 7.14% (1 / 14)
crossorigin.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
jpeg2000.js 16.67% (1 / 6) 100% (0 / 0) 0% (0 / 3) 16.67% (1 / 6)
jpegxr.js 16.67% (1 / 6) 100% (0 / 0) 0% (0 / 3) 16.67% (1 / 6)
sizes.js 6.25% (1 / 16) 0% (0 / 4) 0% (0 / 3) 6.25% (1 / 16)
srcset.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
webp-alpha.js 12.5% (1 / 8) 100% (0 / 0) 0% (0 / 4) 12.5% (1 / 8)
webp-animation.js 12.5% (1 / 8) 100% (0 / 0) 0% (0 / 4) 12.5% (1 / 8)
webp-lossless.js 12.5% (1 / 8) 100% (0 / 0) 0% (0 / 4) 12.5% (1 / 8)
webp.js 15.79% (3 / 19) 0% (0 / 14) 0% (0 / 5) 15.79% (3 / 19)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/img/apng.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/img/apng.js

Statements: 7.14% (1 / 14)      Branches: 0% (0 / 4)      Functions: 0% (0 / 4)      Lines: 7.14% (1 / 14)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43                                2                                                    
/*!
{
  "name": "Animated PNG",
  "async": true,
  "property": "apng",
  "tags": ["image"],
  "builderAliases": ["img_apng"],
  "notes": [{
    "name": "Wikipedia Article",
    "href": "https://en.wikipedia.org/wiki/APNG"
  }]
}
!*/
/* DOC
Test for animated png support.
*/
define(['Modernizr', 'createElement', 'addTest', 'test/canvas'], function(Modernizr, createElement, addTest) {
  Modernizr.addAsyncTest(function() {
    if (!Modernizr.canvas) {
      return false;
    }
 
    var image = new Image();
    var canvas = createElement('canvas');
    var ctx = canvas.getContext('2d');
 
    image.onload = function() {
      addTest('apng', function() {
        if (typeof canvas.getContext == 'undefined') {
          return false;
        }
        else {
          ctx.drawImage(image, 0, 0);
          return ctx.getImageData(0, 0, 1, 1).data[3] === 0;
        }
      });
    };
 
    image.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACGFjVEwAAAABAAAAAcMq2TYAAAANSURBVAiZY2BgYPgPAAEEAQB9ssjfAAAAGmZjVEwAAAAAAAAAAQAAAAEAAAAAAAAAAAD6A+gBAbNU+2sAAAARZmRBVAAAAAEImWNgYGBgAAAABQAB6MzFdgAAAABJRU5ErkJggg==';
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/img/crossorigin.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/img/crossorigin.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18                          2        
/*!
{
  "name": "Image crossOrigin",
  "property": "imgcrossorigin",
  "notes": [{
    "name": "Cross Domain Images and the Tainted Canvas",
    "href": "https://blog.codepen.io/2013/10/08/cross-domain-images-tainted-canvas/"
  }]
}
!*/
/* DOC
Detects support for the crossOrigin attribute on images, which allow for cross domain images inside of a canvas without tainting it
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('imgcrossorigin', 'crossOrigin' in createElement('img'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/img/jpeg2000.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/img/jpeg2000.js

Statements: 16.67% (1 / 6)      Branches: 100% (0 / 0)      Functions: 0% (0 / 3)      Lines: 16.67% (1 / 6)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31                                  2                          
/*!
{
  "name": "JPEG 2000",
  "async": true,
  "aliases": ["jpeg-2000", "jpg2"],
  "property": "jpeg2000",
  "tags": ["image"],
  "authors": ["@eric_wvgg"],
  "notes": [{
    "name": "Wikipedia Article",
    "href": "https://en.wikipedia.org/wiki/JPEG_2000"
  }]
}
!*/
/* DOC
Test for JPEG 2000 support
*/
define(['Modernizr', 'addTest'], function(Modernizr, addTest) {
 
  Modernizr.addAsyncTest(function() {
    var image = new Image();
 
    image.onload = image.onerror = function() {
      addTest('jpeg2000', image.width == 1);
    };
 
    image.src = 'data:image/jp2;base64,/0//UQAyAAAAAAABAAAAAgAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEBwEBBwEBBwEBBwEB/1IADAAAAAEAAAQEAAH/XAAEQED/ZAAlAAFDcmVhdGVkIGJ5IE9wZW5KUEVHIHZlcnNpb24gMi4wLjD/kAAKAAAAAABYAAH/UwAJAQAABAQAAf9dAAUBQED/UwAJAgAABAQAAf9dAAUCQED/UwAJAwAABAQAAf9dAAUDQED/k8+kEAGvz6QQAa/PpBABr994EAk//9k=';
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/img/jpegxr.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/img/jpegxr.js

Statements: 16.67% (1 / 6)      Branches: 100% (0 / 0)      Functions: 0% (0 / 3)      Lines: 16.67% (1 / 6)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30                                2                          
/*!
{
  "name": "JPEG XR (extended range)",
  "async": true,
  "aliases": ["jpeg-xr"],
  "property": "jpegxr",
  "tags": ["image"],
  "notes": [{
    "name": "Wikipedia Article",
    "href": "https://en.wikipedia.org/wiki/JPEG_XR"
  }]
}
!*/
/* DOC
Test for JPEG XR support
*/
define(['Modernizr', 'addTest'], function(Modernizr, addTest) {
 
  Modernizr.addAsyncTest(function() {
    var image = new Image();
 
    image.onload = image.onerror = function() {
      addTest('jpegxr', image.width == 1, {aliases: ['jpeg-xr']});
    };
 
    image.src = 'data:image/vnd.ms-photo;base64,SUm8AQgAAAAFAAG8AQAQAAAASgAAAIC8BAABAAAAAQAAAIG8BAABAAAAAQAAAMC8BAABAAAAWgAAAMG8BAABAAAAHwAAAAAAAAAkw91vA07+S7GFPXd2jckNV01QSE9UTwAZAYBxAAAAABP/gAAEb/8AAQAAAQAAAA==';
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/img/sizes.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/img/sizes.js

Statements: 6.25% (1 / 16)      Branches: 0% (0 / 4)      Functions: 0% (0 / 3)      Lines: 6.25% (1 / 16)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48                                      2                                                        
/*!
{
  "name": "sizes attribute",
  "async": true,
  "property": "sizes",
  "tags": ["image"],
  "authors": ["Mat Marquis"],
  "notes": [{
    "name": "Spec",
    "href": "http://picture.responsiveimages.org/#parse-sizes-attr"
    },{
    "name": "Usage Details",
    "href": "http://ericportis.com/posts/2014/srcset-sizes/"
    }]
}
!*/
/* DOC
Test for the `sizes` attribute on images
*/
define(['Modernizr', 'createElement', 'addTest'], function(Modernizr, createElement, addTest) {
  Modernizr.addAsyncTest(function() {
    var width1, width2, test;
    var image = createElement('img');
    // in a perfect world this would be the test...
    var isSizes = 'sizes' in image;
 
    // ... but we need to deal with Safari 9...
    if (!isSizes && ('srcset' in  image)) {
      width2 = 'data:image/gif;base64,R0lGODlhAgABAPAAAP///wAAACH5BAAAAAAALAAAAAACAAEAAAICBAoAOw==';
      width1 = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';
 
      test = function() {
        addTest('sizes', image.width == 2);
      };
 
      image.onload = test;
      image.onerror = test;
      image.setAttribute('sizes', '9px');
 
      image.srcset = width1 + ' 1w,' + width2 + ' 8w';
      image.src = width1;
    } else {
      addTest('sizes', isSizes);
    }
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/img/srcset.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/img/srcset.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22                                  2        
/*!
{
  "name": "srcset attribute",
  "property": "srcset",
  "tags": ["image"],
  "notes": [{
    "name": "Smashing Magazine Article",
    "href": "https://en.wikipedia.org/wiki/APNG"
    },{
    "name": "Generate multi-resolution images for srcset with Grunt",
    "href": "https://addyosmani.com/blog/generate-multi-resolution-images-for-srcset-with-grunt/"
    }]
}
!*/
/* DOC
Test for the srcset attribute of images
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('srcset', 'srcset' in createElement('img'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/img/webp-alpha.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/img/webp-alpha.js

Statements: 12.5% (1 / 8)      Branches: 100% (0 / 0)      Functions: 0% (0 / 4)      Lines: 12.5% (1 / 8)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40                                              2                                
/*!
{
  "name": "Webp Alpha",
  "async": true,
  "property": "webpalpha",
  "aliases": ["webp-alpha"],
  "tags": ["image"],
  "authors": ["Krister Kari", "Rich Bradshaw", "Ryan Seddon", "Paul Irish"],
  "notes": [{
    "name": "WebP Info",
    "href": "https://developers.google.com/speed/webp/"
  },{
    "name": "Article about WebP support on Android browsers",
    "href": "http://www.wope-framework.com/en/2013/06/24/webp-support-on-android-browsers/"
  },{
    "name": "Chromium WebP announcement",
    "href": "https://blog.chromium.org/2011/11/lossless-and-transparency-encoding-in.html?m=1"
  }]
}
!*/
/* DOC
Tests for transparent webp support.
*/
define(['Modernizr', 'addTest'], function(Modernizr, addTest) {
  Modernizr.addAsyncTest(function() {
    var image = new Image();
 
    image.onerror = function() {
      addTest('webpalpha', false, {aliases: ['webp-alpha']});
    };
 
    image.onload = function() {
      addTest('webpalpha', image.width == 1, {aliases: ['webp-alpha']});
    };
 
    image.src = 'data:image/webp;base64,UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAABBxAR/Q9ERP8DAABWUDggGAAAADABAJ0BKgEAAQADADQlpAADcAD++/1QAA==';
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/img/webp-animation.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/img/webp-animation.js

Statements: 12.5% (1 / 8)      Branches: 100% (0 / 0)      Functions: 0% (0 / 4)      Lines: 12.5% (1 / 8)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37                                        2                                
/*!
{
  "name": "Webp Animation",
  "async": true,
  "property": "webpanimation",
  "aliases": ["webp-animation"],
  "tags": ["image"],
  "authors": ["Krister Kari", "Rich Bradshaw", "Ryan Seddon", "Paul Irish"],
  "notes": [{
    "name": "WebP Info",
    "href": "https://developers.google.com/speed/webp/"
  },{
    "name": "Chromium blog - Chrome 32 Beta: Animated WebP images and faster Chrome for Android touch input",
    "href": "https://blog.chromium.org/2013/11/chrome-32-beta-animated-webp-images-and.html"
  }]
}
!*/
/* DOC
Tests for animated webp support.
*/
define(['Modernizr', 'addTest'], function(Modernizr, addTest) {
  Modernizr.addAsyncTest(function() {
    var image = new Image();
 
    image.onerror = function() {
      addTest('webpanimation', false, {aliases: ['webp-animation']});
    };
 
    image.onload = function() {
      addTest('webpanimation', image.width == 1, {aliases: ['webp-animation']});
    };
 
    image.src = 'data:image/webp;base64,UklGRlIAAABXRUJQVlA4WAoAAAASAAAAAAAAAAAAQU5JTQYAAAD/////AABBTk1GJgAAAAAAAAAAAAAAAAAAAGQAAABWUDhMDQAAAC8AAAAQBxAREYiI/gcA';
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/img/webp-lossless.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/img/webp-lossless.js

Statements: 12.5% (1 / 8)      Branches: 100% (0 / 0)      Functions: 0% (0 / 4)      Lines: 12.5% (1 / 8)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36                                      2                                
/*!
{
  "name": "Webp Lossless",
  "async": true,
  "property": ["webplossless", "webp-lossless"],
  "tags": ["image"],
  "authors": ["@amandeep", "Rich Bradshaw", "Ryan Seddon", "Paul Irish"],
  "notes": [{
    "name": "Webp Info",
    "href": "https://developers.google.com/speed/webp/"
  },{
    "name": "Webp Lossless Spec",
    "href": "https://developers.google.com/speed/webp/docs/webp_lossless_bitstream_specification"
  }]
}
!*/
/* DOC
Tests for non-alpha lossless webp support.
*/
define(['Modernizr', 'addTest'], function(Modernizr, addTest) {
  Modernizr.addAsyncTest(function() {
    var image = new Image();
 
    image.onerror = function() {
      addTest('webplossless', false, {aliases: ['webp-lossless']});
    };
 
    image.onload = function() {
      addTest('webplossless', image.width == 1, {aliases: ['webp-lossless']});
    };
 
    image.src = 'data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA=';
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/img/webp.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/img/webp.js

Statements: 15.79% (3 / 19)      Branches: 0% (0 / 14)      Functions: 0% (0 / 5)      Lines: 15.79% (3 / 19)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97                                                                          2                                     1       1                                                                        
/*!
{
  "name": "Webp",
  "async": true,
  "property": "webp",
  "tags": ["image"],
  "builderAliases": ["img_webp"],
  "authors": ["Krister Kari", "@amandeep", "Rich Bradshaw", "Ryan Seddon", "Paul Irish"],
  "notes": [{
    "name": "Webp Info",
    "href": "https://developers.google.com/speed/webp/"
  }, {
    "name": "Chormium blog - Chrome 32 Beta: Animated WebP images and faster Chrome for Android touch input",
    "href": "https://blog.chromium.org/2013/11/chrome-32-beta-animated-webp-images-and.html"
  }, {
    "name": "Webp Lossless Spec",
    "href": "https://developers.google.com/speed/webp/docs/webp_lossless_bitstream_specification"
  }, {
    "name": "Article about WebP support on Android browsers",
    "href": "http://www.wope-framework.com/en/2013/06/24/webp-support-on-android-browsers/"
  }, {
    "name": "Chormium WebP announcement",
    "href": "https://blog.chromium.org/2011/11/lossless-and-transparency-encoding-in.html?m=1"
  }]
}
!*/
/* DOC
Tests for lossy, non-alpha webp support.
 
Tests for all forms of webp support (lossless, lossy, alpha, and animated)..
 
  Modernizr.webp              // Basic support (lossy)
  Modernizr.webp.lossless     // Lossless
  Modernizr.webp.alpha        // Alpha (both lossy and lossless)
  Modernizr.webp.animation    // Animated WebP
 
*/
define(['Modernizr', 'addTest'], function(Modernizr, addTest) {
 
  Modernizr.addAsyncTest(function() {
 
    var webpTests = [{
      'uri': 'data:image/webp;base64,UklGRiQAAABXRUJQVlA4IBgAAAAwAQCdASoBAAEAAwA0JaQAA3AA/vuUAAA=',
      'name': 'webp'
    }, {
      'uri': 'data:image/webp;base64,UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAABBxAR/Q9ERP8DAABWUDggGAAAADABAJ0BKgEAAQADADQlpAADcAD++/1QAA==',
      'name': 'webp.alpha'
    }, {
      'uri': 'data:image/webp;base64,UklGRlIAAABXRUJQVlA4WAoAAAASAAAAAAAAAAAAQU5JTQYAAAD/////AABBTk1GJgAAAAAAAAAAAAAAAAAAAGQAAABWUDhMDQAAAC8AAAAQBxAREYiI/gcA',
      'name': 'webp.animation'
    }, {
      'uri': 'data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA=',
      'name': 'webp.lossless'
    }];
 
    var webp = webpTests.shift();
    function test(name, uri, cb) {
 
      var image = new Image();
 
      function addResult(event) {
        // if the event is from 'onload', check the see if the image's width is
        // 1 pixel (which indiciates support). otherwise, it fails
 
        var result = event && event.type === 'load' ? image.width == 1 : false;
        var baseTest = name === 'webp';
 
        // if it is the base test, and the result is false, just set a literal false
        // rather than use the Boolean contrsuctor
        addTest(name, (baseTest && result) ? new Boolean(result) : result);
 
        if (cb) {
          cb(event);
        }
      }
 
      image.onerror = addResult;
      image.onload = addResult;
 
      image.src = uri;
    }
 
    // test for webp support in general
    test(webp.name, webp.uri, function(e) {
      // if the webp test loaded, test everything else.
      if (e && e.type === 'load') {
        for (var i = 0; i < webpTests.length; i++) {
          test(webpTests[i].name, webpTests[i].uri);
        }
      }
    });
 
  });
 
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/input/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/input/

Statements: 50% (4 / 8)      Branches: 100% (0 / 0)      Functions: 0% (0 / 4)      Lines: 50% (4 / 8)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/input/
File Statements Branches Functions Lines
formaction.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
formenctype.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
formmethod.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
formtarget.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/input/formaction.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/input/formaction.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25                                        2        
/*!
{
  "name": "input formaction",
  "property": "inputformaction",
  "aliases": ["input-formaction"],
  "notes": [{
    "name": "WHATWG Spec",
    "href": "https://html.spec.whatwg.org/multipage/forms.html#attr-fs-formaction"
  }, {
    "name": "Wufoo demo",
    "href": "https://www.wufoo.com/html5/attributes/13-formaction.html"
  }],
  "polyfills": [
    "webshims"
  ]
}
!*/
/* DOC
Detect support for the formaction attribute on form inputs
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('inputformaction', !!('formAction' in createElement('input')), {aliases: ['input-formaction']});
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/input/formenctype.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/input/formenctype.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25                                        2        
/*!
{
  "name": "input formenctype",
  "property": "inputformenctype",
  "aliases": ["input-formenctype"],
  "notes": [{
    "name": "WHATWG Spec",
    "href": "https://html.spec.whatwg.org/multipage/forms.html#attr-fs-formenctype"
  }, {
    "name": "Wufoo demo",
    "href": "https://www.wufoo.com/html5/attributes/16-formenctype.html"
  }],
  "polyfills": [
    "html5formshim"
  ]
}
!*/
/* DOC
Detect support for the formenctype attribute on form inputs, which overrides the form enctype attribute
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('inputformenctype', !!('formEnctype' in createElement('input')), {aliases: ['input-formenctype']});
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/input/formmethod.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/input/formmethod.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24                                      2        
/*!
{
  "name": "input formmethod",
  "property": "inputformmethod",
  "notes": [{
    "name": "WHATWG Spec",
    "href": "https://html.spec.whatwg.org/multipage/forms.html#attr-fs-formmethod"
  }, {
    "name": "Wufoo demo",
    "href": "https://www.wufoo.com/html5/attributes/14-formmethod.html"
  }],
  "polyfills": [
    "webshims"
  ]
}
!*/
/* DOC
Detect support for the formmethod attribute on form inputs
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('inputformmethod', !!('formMethod' in createElement('input')));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/input/formtarget.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/input/formtarget.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25                                        2        
/*!
{
  "name": "input formtarget",
  "property": "inputformtarget",
  "aliases": ["input-formtarget"],
  "notes": [{
    "name": "WHATWG Spec",
    "href": "https://html.spec.whatwg.org/multipage/forms.html#attr-fs-formtarget"
  }, {
    "name": "Wufoo demo",
    "href": "https://www.wufoo.com/html5/attributes/15-formtarget.html"
  }],
  "polyfills": [
    "html5formshim"
  ]
}
!*/
/* DOC
Detect support for the formtarget attribute on form inputs, which overrides the form target attribute
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('inputformtarget', !!('formtarget' in createElement('input')), {aliases: ['input-formtarget']});
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/mediaquery/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/mediaquery/

Statements: 50% (2 / 4)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 50% (2 / 4)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/mediaquery/
File Statements Branches Functions Lines
hovermq.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
pointermq.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/mediaquery/hovermq.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/mediaquery/hovermq.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18                          2        
/*!
{
  "name": "Hover Media Query",
  "property": "hovermq",
  "notes": [{
    "name": "//Name of reference document",
    "href": "//URL of reference document"
  }]
}
!*/
/* DOC
Detect support for Hover based media queries
*/
define(['Modernizr', 'addTest', 'mq'], function(Modernizr, addTest, mq) {
  Modernizr.addTest('hovermq', mq(('(hover)')));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/mediaquery/pointermq.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/mediaquery/pointermq.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18                          2        
/*!
{
  "name": "Pointer Media Query",
  "property": "pointermq",
  "notes": [{
    "name": "//Name of reference document",
    "href": "//URL of reference document"
  }]
}
!*/
/* DOC
Detect support for Pointer based media queries
*/
define(['Modernizr', 'addTest', 'mq'], function(Modernizr, addTest, mq) {
  Modernizr.addTest('pointermq', mq(('(pointer:coarse),(pointer:fine),(pointer:none)')));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/

Statements: 37.93% (11 / 29)      Branches: 0% (0 / 9)      Functions: 0% (0 / 13)      Lines: 37.93% (11 / 29)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/
File Statements Branches Functions Lines
beacon.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
connection.js 25% (1 / 4) 0% (0 / 5) 0% (0 / 2) 25% (1 / 4)
eventsource.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
fetch.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
xhr-responsetype-arraybuffer.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
xhr-responsetype-blob.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
xhr-responsetype-document.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
xhr-responsetype-json.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
xhr-responsetype-text.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
xhr-responsetype.js 14.29% (1 / 7) 0% (0 / 2) 0% (0 / 2) 14.29% (1 / 7)
xhr2.js 50% (1 / 2) 0% (0 / 2) 0% (0 / 1) 50% (1 / 2)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/beacon.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/beacon.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23                                    2        
/*!
{
  "name": "Beacon API",
  "notes": [{
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en-US/docs/Web/API/navigator.sendBeacon"
  },{
    "name": "W3C specification",
    "href": "https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/Beacon/Overview.html"
  }],
  "property": "beacon",
  "tags": ["beacon", "network"],
  "authors": ["Cătălin Mariș"]
}
!*/
/* DOC
Detects support for an API that allows for asynchronous transfer of small HTTP data from the client to a server.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('beacon', 'sendBeacon' in navigator);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/connection.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/connection.js

Statements: 25% (1 / 4)      Branches: 0% (0 / 5)      Functions: 0% (0 / 2)      Lines: 25% (1 / 4)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38                                                    2                      
/*!
{
  "name": "Low Bandwidth Connection",
  "property": "lowbandwidth",
  "tags": ["network"],
  "builderAliases": ["network_connection"]
}
!*/
/* DOC
Tests for determining low-bandwidth via `navigator.connection`
 
There are two iterations of the `navigator.connection` interface.
 
The first is present in Android 2.2+ and only in the Browser (not WebView)
 
- http://docs.phonegap.com/en/1.2.0/phonegap_connection_connection.md.html#connection.type
- http://davidbcalhoun.com/2010/using-navigator-connection-android
 
The second is specced at http://dev.w3.org/2009/dap/netinfo/ and perhaps landing in WebKit
 
- https://bugs.webkit.org/show_bug.cgi?id=73528
 
Unknown devices are assumed as fast
 
For more rigorous network testing, consider boomerang.js: https://github.com/bluesmoon/boomerang/
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('lowbandwidth', function() {
    // polyfill
    var connection = navigator.connection || {type: 0};
 
    return connection.type == 3 || // connection.CELL_2G
      connection.type == 4 || // connection.CELL_3G
      /^[23]g$/.test(connection.type); // string value in new spec
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/eventsource.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/eventsource.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20                              2        
/*!
{
  "name": "Server Sent Events",
  "property": "eventsource",
  "tags": ["network"],
  "builderAliases": ["network_eventsource"],
  "notes": [{
    "name": "WHATWG Spec",
    "href": "https://html.spec.whatwg.org/multipage/comms.html#server-sent-events"
  }]
}
!*/
/* DOC
Tests for server sent events aka eventsource.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('eventsource', 'EventSource' in window);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/fetch.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/fetch.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21                                2        
/*!
{
  "name": "Fetch API",
  "property": "fetch",
  "tags": ["network"],
  "caniuse": "fetch",
  "notes": [{
    "name": "Fetch Living Standard",
    "href": "https://fetch.spec.whatwg.org/"
  }],
  "polyfills": ["fetch"]
}
!*/
/* DOC
Detects support for the fetch API, a modern replacement for XMLHttpRequest.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('fetch', 'fetch' in window);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/xhr-responsetype-arraybuffer.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/xhr-responsetype-arraybuffer.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19                            2        
/*!
{
  "name": "XHR responseType='arraybuffer'",
  "property": "xhrresponsetypearraybuffer",
  "tags": ["network"],
  "notes": [{
    "name": "XMLHttpRequest Living Standard",
    "href": "https://xhr.spec.whatwg.org/#the-responsetype-attribute"
  }]
}
!*/
/* DOC
Tests for XMLHttpRequest xhr.responseType='arraybuffer'.
*/
define(['Modernizr', 'testXhrType'], function(Modernizr, testXhrType) {
  Modernizr.addTest('xhrresponsetypearraybuffer', testXhrType('arraybuffer'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/xhr-responsetype-blob.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/xhr-responsetype-blob.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19                            2        
/*!
{
  "name": "XHR responseType='blob'",
  "property": "xhrresponsetypeblob",
  "tags": ["network"],
  "notes": [{
    "name": "XMLHttpRequest Living Standard",
    "href": "https://xhr.spec.whatwg.org/#the-responsetype-attribute"
  }]
}
!*/
/* DOC
Tests for XMLHttpRequest xhr.responseType='blob'.
*/
define(['Modernizr', 'testXhrType'], function(Modernizr, testXhrType) {
  Modernizr.addTest('xhrresponsetypeblob', testXhrType('blob'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/xhr-responsetype-document.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/xhr-responsetype-document.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19                            2        
/*!
{
  "name": "XHR responseType='document'",
  "property": "xhrresponsetypedocument",
  "tags": ["network"],
  "notes": [{
    "name": "XMLHttpRequest Living Standard",
    "href": "https://xhr.spec.whatwg.org/#the-responsetype-attribute"
  }]
}
!*/
/* DOC
Tests for XMLHttpRequest xhr.responseType='document'.
*/
define(['Modernizr', 'testXhrType'], function(Modernizr, testXhrType) {
  Modernizr.addTest('xhrresponsetypedocument', testXhrType('document'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/xhr-responsetype-json.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/xhr-responsetype-json.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22                                  2        
/*!
{
  "name": "XHR responseType='json'",
  "property": "xhrresponsetypejson",
  "tags": ["network"],
  "notes": [{
    "name": "XMLHttpRequest Living Standard",
    "href": "https://xhr.spec.whatwg.org/#the-responsetype-attribute"
  },{
    "name": "Explanation of xhr.responseType='json'",
    "href": "https://mathiasbynens.be/notes/xhr-responsetype-json"
  }]
}
!*/
/* DOC
Tests for XMLHttpRequest xhr.responseType='json'.
*/
define(['Modernizr', 'testXhrType'], function(Modernizr, testXhrType) {
  Modernizr.addTest('xhrresponsetypejson', testXhrType('json'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/xhr-responsetype-text.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/xhr-responsetype-text.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19                            2        
/*!
{
  "name": "XHR responseType='text'",
  "property": "xhrresponsetypetext",
  "tags": ["network"],
  "notes": [{
    "name": "XMLHttpRequest Living Standard",
    "href": "https://xhr.spec.whatwg.org/#the-responsetype-attribute"
  }]
}
!*/
/* DOC
Tests for XMLHttpRequest xhr.responseType='text'.
*/
define(['Modernizr', 'testXhrType'], function(Modernizr, testXhrType) {
  Modernizr.addTest('xhrresponsetypetext', testXhrType('text'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/xhr-responsetype.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/xhr-responsetype.js

Statements: 14.29% (1 / 7)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 14.29% (1 / 7)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26                            2                      
/*!
{
  "name": "XHR responseType",
  "property": "xhrresponsetype",
  "tags": ["network"],
  "notes": [{
    "name": "XMLHttpRequest Living Standard",
    "href": "https://xhr.spec.whatwg.org/#the-responsetype-attribute"
  }]
}
!*/
/* DOC
Tests for XMLHttpRequest xhr.responseType.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('xhrresponsetype', (function() {
    if (typeof XMLHttpRequest == 'undefined') {
      return false;
    }
    var xhr = new XMLHttpRequest();
    xhr.open('get', '/', true);
    return 'response' in xhr;
  }()));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/xhr2.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/network/xhr2.js

Statements: 50% (1 / 2)      Branches: 0% (0 / 2)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26                                    2              
/*!
{
  "name": "XML HTTP Request Level 2 XHR2",
  "property": "xhr2",
  "tags": ["network"],
  "builderAliases": ["network_xhr2"],
  "notes": [{
    "name": "W3 Spec",
    "href": "https://www.w3.org/TR/XMLHttpRequest2/"
  },{
    "name": "Details on Related Github Issue",
    "href": "https://github.com/Modernizr/Modernizr/issues/385"
  }]
}
!*/
/* DOC
Tests for XHR2.
*/
define(['Modernizr'], function(Modernizr) {
  // all three of these details report consistently across all target browsers:
  //   !!(window.ProgressEvent);
  //   'XMLHttpRequest' in window && 'withCredentials' in new XMLHttpRequest
  Modernizr.addTest('xhr2', 'XMLHttpRequest' in window && 'withCredentials' in new XMLHttpRequest());
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/script/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/script/

Statements: 50% (2 / 4)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 50% (2 / 4)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/script/
File Statements Branches Functions Lines
async.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
defer.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/script/async.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/script/async.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18                          2        
/*!
{
  "name": "script[async]",
  "property": "scriptasync",
  "caniuse": "script-async",
  "tags": ["script"],
  "builderAliases": ["script_async"],
  "authors": ["Theodoor van Donge"]
}
!*/
/* DOC
Detects support for the `async` attribute on the `<script>` element.
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('scriptasync', 'async' in createElement('script'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/script/defer.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/script/defer.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20                              2        
/*!
{
  "name": "script[defer]",
  "property": "scriptdefer",
  "caniuse": "script-defer",
  "tags": ["script"],
  "builderAliases": ["script_defer"],
  "authors": ["Theodoor van Donge"],
  "warnings": ["Browser implementation of the `defer` attribute vary: https://stackoverflow.com/questions/3952009/defer-attribute-chrome#answer-3982619"],
  "knownBugs": ["False positive in Opera 12"]
}
!*/
/* DOC
Detects support for the `defer` attribute on the `<script>` element.
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('scriptdefer', 'defer' in createElement('script'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/speech/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/speech/

Statements: 50% (2 / 4)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 50% (2 / 4)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/speech/
File Statements Branches Functions Lines
speech-recognition.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
speech-synthesis.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/speech/speech-recognition.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/speech/speech-recognition.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24                                      2        
/*!
{
  "authors": ["Cătălin Mariș"],
  "name": "Speech Recognition API",
  "notes": [
    {
      "name": "W3C Web Speech API Specification - The SpeechRecognition Interface",
      "href": "https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#speechreco-section"
    },
    {
      "name": "Introduction to the Web Speech API",
      "href": "http://updates.html5rocks.com/2013/01/Voice-Driven-Web-Apps-Introduction-to-the-Web-Speech-API"
    }
  ],
  "property": "speechrecognition",
  "tags": ["input", "speech"]
}
!*/
 
define(['Modernizr', 'prefixed'], function(Modernizr, prefixed) {
  Modernizr.addTest('speechrecognition', !!prefixed('SpeechRecognition', window));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/speech/speech-synthesis.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/speech/speech-synthesis.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20                              2        
/*!
{
  "authors": ["Cătălin Mariș"],
  "name": "Speech Synthesis API",
  "notes": [
    {
      "name": "W3C Web Speech API Specification - The SpeechSynthesis Interface",
      "href": "https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section"
    }
  ],
  "property": "speechsynthesis",
  "tags": ["input", "speech"]
}
!*/
 
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('speechsynthesis', 'SpeechSynthesisUtterance' in window);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/storage/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/storage/

Statements: 16.67% (3 / 18)      Branches: 100% (0 / 0)      Functions: 0% (0 / 5)      Lines: 16.67% (3 / 18)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/storage/
File Statements Branches Functions Lines
localstorage.js 12.5% (1 / 8) 100% (0 / 0) 0% (0 / 2) 12.5% (1 / 8)
sessionstorage.js 12.5% (1 / 8) 100% (0 / 0) 0% (0 / 2) 12.5% (1 / 8)
websqldatabase.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/storage/localstorage.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/storage/localstorage.js

Statements: 12.5% (1 / 8)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 12.5% (1 / 8)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52                                    2                                                                  
/*!
{
  "name": "Local Storage",
  "property": "localstorage",
  "caniuse": "namevalue-storage",
  "tags": ["storage"],
  "knownBugs": [],
  "notes": [],
  "warnings": [],
  "polyfills": [
    "joshuabell-polyfill",
    "cupcake",
    "storagepolyfill",
    "amplifyjs",
    "yui-cacheoffline"
  ]
}
!*/
define(['Modernizr'], function(Modernizr) {
  // In FF4, if disabled, window.localStorage should === null.
 
  // Normally, we could not test that directly and need to do a
  //   `('localStorage' in window)` test first because otherwise Firefox will
  //   throw bugzil.la/365772 if cookies are disabled
 
  // Similarly, in Chrome with "Block third-party cookies and site data" enabled,
  // attempting to access `window.sessionStorage` will throw an exception. crbug.com/357625
 
  // Also in iOS5 Private Browsing mode, attempting to use localStorage.setItem
  // will throw the exception:
  //   QUOTA_EXCEEDED_ERROR DOM Exception 22.
  // Peculiarly, getItem and removeItem calls do not throw.
 
  // Because we are forced to try/catch this, we'll go aggressive.
 
  // Just FWIW: IE8 Compat mode supports these features completely:
  //   www.quirksmode.org/dom/html5.html
  // But IE8 doesn't support either with local files
 
  Modernizr.addTest('localstorage', function() {
    var mod = 'modernizr';
    try {
      localStorage.setItem(mod, mod);
      localStorage.removeItem(mod);
      return true;
    } catch (e) {
      return false;
    }
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/storage/sessionstorage.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/storage/sessionstorage.js

Statements: 12.5% (1 / 8)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 12.5% (1 / 8)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27                2                                    
/*!
{
  "name": "Session Storage",
  "property": "sessionstorage",
  "tags": ["storage"],
  "polyfills": ["joshuabell-polyfill", "cupcake", "sessionstorage"]
}
!*/
define(['Modernizr'], function(Modernizr) {
  // Because we are forced to try/catch this, we'll go aggressive.
 
  // Just FWIW: IE8 Compat mode supports these features completely:
  //   www.quirksmode.org/dom/html5.html
  // But IE8 doesn't support either with local files
  Modernizr.addTest('sessionstorage', function() {
    var mod = 'modernizr';
    try {
      sessionStorage.setItem(mod, mod);
      sessionStorage.removeItem(mod);
      return true;
    } catch (e) {
      return false;
    }
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/storage/websqldatabase.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/storage/websqldatabase.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15                2            
/*!
{
  "name": "Web SQL Database",
  "property": "websqldatabase",
  "caniuse": "sql-storage",
  "tags": ["storage"]
}
!*/
define(['Modernizr'], function(Modernizr) {
  // Chrome incognito mode used to throw an exception when using openDatabase
  // It doesn't anymore.
  Modernizr.addTest('websqldatabase', 'openDatabase' in window);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/style/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/style/

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/style/
File Statements Branches Functions Lines
scoped.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/style/scoped.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/style/scoped.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23                                    2        
/*!
{
  "name": "style[scoped]",
  "property": "stylescoped",
  "caniuse": "style-scoped",
  "tags": ["dom"],
  "builderAliases": ["style_scoped"],
  "authors": ["Cătălin Mariș"],
  "notes": [{
    "name": "WHATWG Specification",
    "href": "https://html.spec.whatwg.org/multipage/semantics.html#attr-style-scoped"
  }],
  "polyfills": ["scoped-styles"]
}
!*/
/* DOC
Support for the `scoped` attribute of the `<style>` element.
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('stylescoped', 'scoped' in createElement('style'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/svg/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/svg/

Statements: 27.27% (6 / 22)      Branches: 0% (0 / 11)      Functions: 0% (0 / 11)      Lines: 27.27% (6 / 22)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/svg/
File Statements Branches Functions Lines
asimg.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
clippaths.js 33.33% (1 / 3) 0% (0 / 2) 0% (0 / 2) 33.33% (1 / 3)
filters.js 16.67% (1 / 6) 0% (0 / 2) 0% (0 / 2) 16.67% (1 / 6)
foreignobject.js 33.33% (1 / 3) 0% (0 / 2) 0% (0 / 2) 33.33% (1 / 3)
inline.js 20% (1 / 5) 0% (0 / 3) 0% (0 / 2) 20% (1 / 5)
smil.js 33.33% (1 / 3) 0% (0 / 2) 0% (0 / 2) 33.33% (1 / 3)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/svg/asimg.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/svg/asimg.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29                            2                            
/*!
{
  "name": "SVG as an <img> tag source",
  "property": "svgasimg",
  "caniuse" : "svg-img",
  "tags": ["svg"],
  "aliases": ["svgincss"],
  "authors": ["Chris Coyier"],
  "notes": [{
    "name": "HTML5 Spec",
    "href": "http://www.w3.org/TR/html5/embedded-content-0.html#the-img-element"
  }]
}
!*/
define(['Modernizr', 'addTest'], function(Modernizr) {
 
  // Original Async test by Stu Cox
  // https://gist.github.com/chriscoyier/8774501
 
  // Now a Sync test based on good results here
  // http://codepen.io/chriscoyier/pen/bADFx
 
  // Note http://www.w3.org/TR/SVG11/feature#Image is *supposed* to represent
  // support for the `<image>` tag in SVG, not an SVG file linked from an `<img>`
  // tag in HTML – but it’s a heuristic which works
  Modernizr.addTest('svgasimg', document.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#Image', '1.1'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/svg/clippaths.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/svg/clippaths.js

Statements: 33.33% (1 / 3)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24                                2              
/*!
{
  "name": "SVG clip paths",
  "property": "svgclippaths",
  "tags": ["svg"],
  "notes": [{
    "name": "Demo",
    "href": "http://srufaculty.sru.edu/david.dailey/svg/newstuff/clipPath4.svg"
  }]
}
!*/
/* DOC
Detects support for clip paths in SVG (only, not on HTML content).
 
See [this discussion](https://github.com/Modernizr/Modernizr/issues/213) regarding applying SVG clip paths to HTML content.
*/
define(['Modernizr', 'toStringFn'], function(Modernizr, toStringFn) {
  Modernizr.addTest('svgclippaths', function() {
    return !!document.createElementNS &&
      /SVGClipPath/.test(toStringFn.call(document.createElementNS('http://www.w3.org/2000/svg', 'clipPath')));
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/svg/filters.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/svg/filters.js

Statements: 16.67% (1 / 6)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 16.67% (1 / 6)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28                            2                          
/*!
{
  "name": "SVG filters",
  "property": "svgfilters",
  "caniuse": "svg-filters",
  "tags": ["svg"],
  "builderAliases": ["svg_filters"],
  "authors": ["Erik Dahlstrom"],
  "notes": [{
    "name": "W3C Spec",
    "href": "https://www.w3.org/TR/SVG11/filters.html"
  }]
}
!*/
define(['Modernizr'], function(Modernizr) {
  // Should fail in Safari: https://stackoverflow.com/questions/9739955/feature-detecting-support-for-svg-filters.
  Modernizr.addTest('svgfilters', function() {
    var result = false;
    try {
      result = 'SVGFEColorMatrixElement' in window &&
        SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_SATURATE == 2;
    }
    catch (e) {}
    return result;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/svg/foreignobject.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/svg/foreignobject.js

Statements: 33.33% (1 / 3)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22                            2              
/*!
{
  "name": "SVG foreignObject",
  "property": "svgforeignobject",
  "tags": ["svg"],
  "notes": [{
    "name": "W3C Spec",
    "href": "https://www.w3.org/TR/SVG11/extend.html"
  }]
}
!*/
/* DOC
Detects support for foreignObject tag in SVG.
*/
define(['Modernizr', 'toStringFn'], function(Modernizr, toStringFn) {
  Modernizr.addTest('svgforeignobject', function() {
    return !!document.createElementNS &&
      /SVGForeignObject/.test(toStringFn.call(document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject')));
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/svg/inline.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/svg/inline.js

Statements: 20% (1 / 5)      Branches: 0% (0 / 3)      Functions: 0% (0 / 2)      Lines: 20% (1 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29                                        2                
/*!
{
  "name": "Inline SVG",
  "property": "inlinesvg",
  "caniuse": "svg-html5",
  "tags": ["svg"],
  "notes": [{
    "name": "Test page",
    "href": "https://paulirish.com/demo/inline-svg"
  }, {
    "name": "Test page and results",
    "href": "https://codepen.io/eltonmesquita/full/GgXbvo/"
  }],
  "polyfills": ["inline-svg-polyfill"],
  "knownBugs": ["False negative on some Chromia browsers."]
}
!*/
/* DOC
Detects support for inline SVG in HTML (not within XHTML).
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('inlinesvg', function() {
    var div = createElement('div');
    div.innerHTML = '<svg/>';
    return (typeof SVGRect != 'undefined' && div.firstChild && div.firstChild.namespaceURI) == 'http://www.w3.org/2000/svg';
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/svg/smil.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/svg/smil.js

Statements: 33.33% (1 / 3)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21                        2                
/*!
{
  "name": "SVG SMIL animation",
  "property": "smil",
  "caniuse": "svg-smil",
  "tags": ["svg"],
  "notes": [{
  "name": "W3C Synchronised Multimedia spec",
  "href": "https://www.w3.org/AudioVideo/"
  }]
}
!*/
define(['Modernizr', 'toStringFn'], function(Modernizr, toStringFn) {
  // SVG SMIL animation
  Modernizr.addTest('smil', function() {
    return !!document.createElementNS &&
      /SVGAnimate/.test(toStringFn.call(document.createElementNS('http://www.w3.org/2000/svg', 'animate')));
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/textarea/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/textarea/

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/textarea/
File Statements Branches Functions Lines
maxlength.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/textarea/maxlength.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/textarea/maxlength.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22                                  2        
/*!
{
  "name": "textarea maxlength",
  "property": "textareamaxlength",
  "aliases": ["textarea-maxlength"],
  "notes": [{
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea"
  }],
  "polyfills": [
    "maxlength"
  ]
}
!*/
/* DOC
Detect support for the maxlength attribute of a textarea element
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('textareamaxlength', !!('maxLength' in createElement('textarea')));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/url/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/url/

Statements: 12.5% (5 / 40)      Branches: 0% (0 / 13)      Functions: 0% (0 / 12)      Lines: 12.5% (5 / 40)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/url/
File Statements Branches Functions Lines
bloburls.js 25% (1 / 4) 0% (0 / 5) 0% (0 / 1) 25% (1 / 4)
data-uri.js 7.41% (2 / 27) 0% (0 / 8) 0% (0 / 8) 7.41% (2 / 27)
parser.js 14.29% (1 / 7) 100% (0 / 0) 0% (0 / 2) 14.29% (1 / 7)
urlsearchparams.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/url/bloburls.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/url/bloburls.js

Statements: 25% (1 / 4)      Branches: 0% (0 / 5)      Functions: 0% (0 / 1)      Lines: 25% (1 / 4)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23                                2            
/*!
{
  "name": "Blob URLs",
  "property": "bloburls",
  "caniuse": "bloburls",
  "notes": [{
    "name": "W3C Working Draft",
    "href": "https://www.w3.org/TR/FileAPI/#creating-revoking"
  }],
  "tags": ["file", "url"],
  "authors": ["Ron Waldon (@jokeyrhyme)"]
}
!*/
/* DOC
Detects support for creating Blob URLs
*/
define(['Modernizr', 'prefixed'], function(Modernizr, prefixed) {
  var url = prefixed('URL', window, false);
  url = url && window[url];
  Modernizr.addTest('bloburls', url && 'revokeObjectURL' in url && 'createObjectURL' in url);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/url/data-uri.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/url/data-uri.js

Statements: 7.41% (2 / 27)      Branches: 0% (0 / 8)      Functions: 0% (0 / 8)      Lines: 7.41% (2 / 27)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81                                              2                                                               1                                                  
/*!
{
  "name": "Data URI",
  "property": "datauri",
  "caniuse": "datauri",
  "tags": ["url"],
  "builderAliases": ["url_data_uri"],
  "async": true,
  "notes": [{
    "name": "Wikipedia article",
    "href": "https://en.wikipedia.org/wiki/Data_URI_scheme"
  }],
  "warnings": ["Support in Internet Explorer 8 is limited to images and linked resources like CSS files, not HTML files"]
}
!*/
/* DOC
Detects support for data URIs. Provides a subproperty to report support for data URIs over 32kb in size:
 
```javascript
Modernizr.datauri           // true
Modernizr.datauri.over32kb  // false in IE8
```
*/
define(['Modernizr', 'addTest'], function(Modernizr, addTest) {
  // https://github.com/Modernizr/Modernizr/issues/14
  Modernizr.addAsyncTest(function() {
 
    // IE7 throw a mixed content warning on HTTPS for this test, so we'll
    // just blacklist it (we know it doesn't support data URIs anyway)
    // https://github.com/Modernizr/Modernizr/issues/362
    if (navigator.userAgent.indexOf('MSIE 7.') !== -1) {
      // Keep the test async
      setTimeout(function() {
        addTest('datauri', false);
      }, 10);
    }
 
    var datauri = new Image();
 
    datauri.onerror = function() {
      addTest('datauri', false);
    };
    datauri.onload = function() {
      if (datauri.width == 1 && datauri.height == 1) {
        testOver32kb();
      }
      else {
        addTest('datauri', false);
      }
    };
 
    datauri.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==';
 
    // Once we have datauri, let's check to see if we can use data URIs over
    // 32kb (IE8 can't). https://github.com/Modernizr/Modernizr/issues/321
    function testOver32kb() {
 
      var datauriBig = new Image();
 
      datauriBig.onerror = function() {
        addTest('datauri', true);
        Modernizr.datauri = new Boolean(true);
        Modernizr.datauri.over32kb = false;
      };
      datauriBig.onload = function() {
        addTest('datauri', true);
        Modernizr.datauri = new Boolean(true);
        Modernizr.datauri.over32kb = (datauriBig.width == 1 && datauriBig.height == 1);
      };
 
      var base64str = 'R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==';
      while (base64str.length < 33000) {
        base64str = '\r\n' + base64str;
      }
      datauriBig.src = 'data:image/gif;base64,' + base64str;
    }
 
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/url/parser.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/url/parser.js

Statements: 14.29% (1 / 7)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 14.29% (1 / 7)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30                                2                          
/*!
{
  "name": "URL parser",
  "property": "urlparser",
  "notes": [{
    "name": "URL",
    "href": "https://dvcs.w3.org/hg/url/raw-file/tip/Overview.html"
  }],
  "polyfills": ["urlparser"],
  "authors": ["Ron Waldon (@jokeyrhyme)"],
  "tags": ["url"]
}
!*/
/* DOC
Check if browser implements the URL constructor for parsing URLs.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('urlparser', function() {
    var url;
    try {
      // have to actually try use it, because Safari defines a dud constructor
      url = new URL('http://modernizr.com/');
      return url.href === 'http://modernizr.com/';
    } catch (e) {
      return false;
    }
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/url/urlsearchparams.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/url/urlsearchparams.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28                                              2        
/*!
{
  "authors": ["Cătălin Mariș"],
  "name": "URLSearchParams API",
  "notes": [
    {
      "name": "WHATWG specification",
      "href": "https://url.spec.whatwg.org/#interface-urlsearchparams"
    },
    {
      "name": "MDN documentation",
      "href": "https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams"
    }
  ],
  "property": "urlsearchparams",
  "tags": ["querystring", "url"]
}
!*/
 
/* DOC
Detects support for an API that provides utility methods for working with the query string of a URL.
*/
 
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('urlsearchparams', 'URLSearchParams' in window);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/video/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/video/

Statements: 10.87% (5 / 46)      Branches: 0% (0 / 17)      Functions: 0% (0 / 7)      Lines: 10.87% (5 / 46)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/video/
File Statements Branches Functions Lines
autoplay.js 5% (2 / 40) 0% (0 / 17) 0% (0 / 4) 5% (2 / 40)
crossorigin.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
loop.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
preload.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/video/autoplay.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/video/autoplay.js

Statements: 5% (2 / 40)      Branches: 0% (0 / 17)      Functions: 0% (0 / 4)      Lines: 5% (2 / 40)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87                          2                   1                                                                                                                              
/*!
{
  "name": "Video Autoplay",
  "property": "videoautoplay",
  "tags": ["video"],
  "async" : true,
  "warnings": ["This test is very large – only include it if you absolutely need it"],
  "knownBugs": ["crashes with an alert on iOS7 when added to homescreen"]
}
!*/
/* DOC
Checks for support of the autoplay attribute of the video element.
*/
define(['Modernizr', 'addTest', 'docElement', 'createElement', 'test/video'], function(Modernizr, addTest, docElement, createElement) {
 
  Modernizr.addAsyncTest(function() {
    var timeout;
    var waitTime = 200;
    var retries = 5;
    var currentTry = 0;
    var elem = createElement('video');
    var elemStyle = elem.style;
 
    function testAutoplay(arg) {
      currentTry++;
      clearTimeout(timeout);
 
      var result = arg && arg.type === 'playing' || elem.currentTime !== 0;
 
      if (!result && currentTry < retries) {
        //Detection can be flaky if the browser is slow, so lets retry in a little bit
        timeout = setTimeout(testAutoplay, waitTime);
        return;
      }
 
      elem.removeEventListener('playing', testAutoplay, false);
      addTest('videoautoplay', result);
 
      // Cleanup, but don't assume elem is still in the page -
      // an extension (eg Flashblock) may already have removed it.
      if (elem.parentNode) {
        elem.parentNode.removeChild(elem);
      }
    }
 
    //skip the test if video itself, or the autoplay
    //element on it isn't supported
    if (!Modernizr.video || !('autoplay' in elem)) {
      addTest('videoautoplay', false);
      return;
    }
 
    elemStyle.position = 'absolute';
    elemStyle.height = 0;
    elemStyle.width = 0;
 
    try {
      if (Modernizr.video.ogg) {
        elem.src = 'data:video/ogg;base64,T2dnUwACAAAAAAAAAABmnCATAAAAAHDEixYBKoB0aGVvcmEDAgEAAQABAAAQAAAQAAAAAAAFAAAAAQAAAAAAAAAAAGIAYE9nZ1MAAAAAAAAAAAAAZpwgEwEAAAACrA7TDlj///////////////+QgXRoZW9yYSsAAABYaXBoLk9yZyBsaWJ0aGVvcmEgMS4xIDIwMDkwODIyIChUaHVzbmVsZGEpAQAAABoAAABFTkNPREVSPWZmbXBlZzJ0aGVvcmEtMC4yOYJ0aGVvcmG+zSj3uc1rGLWpSUoQc5zmMYxSlKQhCDGMYhCEIQhAAAAAAAAAAAAAEW2uU2eSyPxWEvx4OVts5ir1aKtUKBMpJFoQ/nk5m41mUwl4slUpk4kkghkIfDwdjgajQYC8VioUCQRiIQh8PBwMhgLBQIg4FRba5TZ5LI/FYS/Hg5W2zmKvVoq1QoEykkWhD+eTmbjWZTCXiyVSmTiSSCGQh8PB2OBqNBgLxWKhQJBGIhCHw8HAyGAsFAiDgUCw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDAwPEhQUFQ0NDhESFRUUDg4PEhQVFRUOEBETFBUVFRARFBUVFRUVEhMUFRUVFRUUFRUVFRUVFRUVFRUVFRUVEAwLEBQZGxwNDQ4SFRwcGw4NEBQZHBwcDhATFhsdHRwRExkcHB4eHRQYGxwdHh4dGxwdHR4eHh4dHR0dHh4eHRALChAYKDM9DAwOExo6PDcODRAYKDlFOA4RFh0zV1A+EhYlOkRtZ00YIzdAUWhxXDFATldneXhlSFxfYnBkZ2MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEhIVGRoaGhoSFBYaGhoaGhUWGRoaGhoaGRoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhESFh8kJCQkEhQYIiQkJCQWGCEkJCQkJB8iJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQREhgvY2NjYxIVGkJjY2NjGBo4Y2NjY2MvQmNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRISEhUXGBkbEhIVFxgZGxwSFRcYGRscHRUXGBkbHB0dFxgZGxwdHR0YGRscHR0dHhkbHB0dHR4eGxwdHR0eHh4REREUFxocIBERFBcaHCAiERQXGhwgIiUUFxocICIlJRcaHCAiJSUlGhwgIiUlJSkcICIlJSUpKiAiJSUlKSoqEBAQFBgcICgQEBQYHCAoMBAUGBwgKDBAFBgcICgwQEAYHCAoMEBAQBwgKDBAQEBgICgwQEBAYIAoMEBAQGCAgAfF5cdH1e3Ow/L66wGmYnfIUbwdUTe3LMRbqON8B+5RJEvcGxkvrVUjTMrsXYhAnIwe0dTJfOYbWrDYyqUrz7dw/JO4hpmV2LsQQvkUeGq1BsZLx+cu5iV0e0eScJ91VIQYrmqfdVSK7GgjOU0oPaPOu5IcDK1mNvnD+K8LwS87f8Jx2mHtHnUkTGAurWZlNQa74ZLSFH9oF6FPGxzLsjQO5Qe0edcpttd7BXBSqMCL4k/4tFrHIPuEQ7m1/uIWkbDMWVoDdOSuRQ9286kvVUlQjzOE6VrNguN4oRXYGkgcnih7t13/9kxvLYKQezwLTrO44sVmMPgMqORo1E0sm1/9SludkcWHwfJwTSybR4LeAz6ugWVgRaY8mV/9SluQmtHrzsBtRF/wPY+X0JuYTs+ltgrXAmlk10xQHmTu9VSIAk1+vcvU4ml2oNzrNhEtQ3CysNP8UeR35wqpKUBdGdZMSjX4WVi8nJpdpHnbhzEIdx7mwf6W1FKAiucMXrWUWVjyRf23chNtR9mIzDoT/6ZLYailAjhFlZuvPtSeZ+2oREubDoWmT3TguY+JHPdRVSLKxfKH3vgNqJ/9emeEYikGXDFNzaLjvTeGAL61mogOoeG3y6oU4rW55ydoj0lUTSR/mmRhPmF86uwIfzp3FtiufQCmppaHDlGE0r2iTzXIw3zBq5hvaTldjG4CPb9wdxAme0SyedVKczJ9AtYbgPOzYKJvZZImsN7ecrxWZg5dR6ZLj/j4qpWsIA+vYwE+Tca9ounMIsrXMB4Stiib2SPQtZv+FVIpfEbzv8ncZoLBXc3YBqTG1HsskTTotZOYTG+oVUjLk6zhP8bg4RhMUNtfZdO7FdpBuXzhJ5Fh8IKlJG7wtD9ik8rWOJxy6iQ3NwzBpQ219mlyv+FLicYs2iJGSE0u2txzed++D61ZWCiHD/cZdQVCqkO2gJpdpNaObhnDfAPrT89RxdWFZ5hO3MseBSIlANppdZNIV/Rwe5eLTDvkfWKzFnH+QJ7m9QWV1KdwnuIwTNtZdJMoXBf74OhRnh2t+OTGL+AVUnIkyYY+QG7g9itHXyF3OIygG2s2kud679ZWKqSFa9n3IHD6MeLv1lZ0XyduRhiDRtrNnKoyiFVLcBm0ba5Yy3fQkDh4XsFE34isVpOzpa9nR8iCpS4HoxG2rJpnRhf3YboVa1PcRouh5LIJv/uQcPNd095ickTaiGBnWLKVWRc0OnYTSyex/n2FofEPnDG8y3PztHrzOLK1xo6RAml2k9owKajOC0Wr4D5x+3nA0UEhK2m198wuBHF3zlWWVKWLN1CHzLClUfuoYBcx4b1llpeBKmbayaR58njtE9onD66lUcsg0Spm2snsb+8HaJRn4dYcLbCuBuYwziB8/5U1C1DOOz2gZjSZtrLJk6vrLF3hwY4Io9xuT/ruUFRSBkNtUzTOWhjh26irLEPx4jPZL3Fo3QrReoGTTM21xYTT9oFdhTUIvjqTkfkvt0bzgVUjq/hOYY8j60IaO/0AzRBtqkTS6R5ellZd5uKdzzhb8BFlDdAcrwkE0rbXTOPB+7Y0FlZO96qFL4Ykg21StJs8qIW7h16H5hGiv8V2Cflau7QVDepTAHa6Lgt6feiEvJDM21StJsmOH/hynURrKxvUpQ8BH0JF7BiyG2qZpnL/7AOU66gt+reLEXY8pVOCQvSsBtqZTNM8bk9ohRcwD18o/WVkbvrceVKRb9I59IEKysjBeTMmmbA21xu/6iHadLRxuIzkLpi8wZYmmbbWi32RVAUjruxWlJ//iFxE38FI9hNKOoCdhwf5fDe4xZ81lgREhK2m1j78vW1CqkuMu/AjBNK210kzRUX/B+69cMMUG5bYrIeZxVSEZISmkzbXOi9yxwIfPgdsov7R71xuJ7rFcACjG/9PzApqFq7wEgzNJm2suWESPuwrQvejj7cbnQxMkxpm21lUYJL0fKmogPPqywn7e3FvB/FCNxPJ85iVUkCE9/tLKx31G4CgNtWTTPFhMvlu8G4/TrgaZttTChljfNJGgOT2X6EqpETy2tYd9cCBI4lIXJ1/3uVUllZEJz4baqGF64yxaZ+zPLYwde8Uqn1oKANtUrSaTOPHkhvuQP3bBlEJ/LFe4pqQOHUI8T8q7AXx3fLVBgSCVpMba55YxN3rv8U1Dv51bAPSOLlZWebkL8vSMGI21lJmmeVxPRwFlZF1CpqCN8uLwymaZyjbXHCRytogPN3o/n74CNykfT+qqRv5AQlHcRxYrC5KvGmbbUwmZY/29BvF6C1/93x4WVglXDLFpmbapmF89HKTogRwqqSlGbu+oiAkcWFbklC6Zhf+NtTLFpn8oWz+HsNRVSgIxZWON+yVyJlE5tq/+GWLTMutYX9ekTySEQPLVNQQ3OfycwJBM0zNtZcse7CvcKI0V/zh16Dr9OSA21MpmmcrHC+6pTAPHPwoit3LHHqs7jhFNRD6W8+EBGoSEoaZttTCZljfduH/fFisn+dRBGAZYtMzbVMwvul/T/crK1NQh8gN0SRRa9cOux6clC0/mDLFpmbarmF8/e6CopeOLCNW6S/IUUg3jJIYiAcDoMcGeRbOvuTPjXR/tyo79LK3kqqkbxkkMRAOB0GODPItnX3Jnxro/25Ud+llbyVVSN4ySGIgHA6DHBnkWzr7kz410f7cqO/Syt5KqpFVJwn6gBEvBM0zNtZcpGOEPiysW8vvRd2R0f7gtjhqUvXL+gWVwHm4XJDBiMpmmZtrLfPwd/IugP5+fKVSysH1EXreFAcEhelGmbbUmZY4Xdo1vQWVnK19P4RuEnbf0gQnR+lDCZlivNM22t1ESmopPIgfT0duOfQrsjgG4tPxli0zJmF5trdL1JDUIUT1ZXSqQDeR4B8mX3TrRro/2McGeUvLtwo6jIEKMkCUXWsLyZROd9P/rFYNtXPBli0z398iVUlVKAjFlY437JXImUTm2r/4ZYtMy61hf16RPJIU9nZ1MABAwAAAAAAAAAZpwgEwIAAABhp658BScAAAAAAADnUFBQXIDGXLhwtttNHDhw5OcpQRMETBEwRPduylKVB0HRdF0A';
      }
      else if (Modernizr.video.h264) {
        elem.src = 'data:video/mp4;base64,AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAAAs1tZGF0AAACrgYF//+q3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0OCByMjYwMSBhMGNkN2QzIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNSAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MzoweDExMyBtZT1oZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0xIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MSA4eDhkY3Q9MSBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0tMiB0aHJlYWRzPTEgbG9va2FoZWFkX3RocmVhZHM9MSBzbGljZWRfdGhyZWFkcz0wIG5yPTAgZGVjaW1hdGU9MSBpbnRlcmxhY2VkPTAgYmx1cmF5X2NvbXBhdD0wIGNvbnN0cmFpbmVkX2ludHJhPTAgYmZyYW1lcz0zIGJfcHlyYW1pZD0yIGJfYWRhcHQ9MSBiX2JpYXM9MCBkaXJlY3Q9MSB3ZWlnaHRiPTEgb3Blbl9nb3A9MCB3ZWlnaHRwPTIga2V5aW50PTI1MCBrZXlpbnRfbWluPTEwIHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhlYWQ9NDAgcmM9Y3JmIG1idHJlZT0xIGNyZj0yMy4wIHFjb21wPTAuNjAgcXBtaW49MCBxcG1heD02OSBxcHN0ZXA9NCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAD2WIhAA3//728P4FNjuZQQAAAu5tb292AAAAbG12aGQAAAAAAAAAAAAAAAAAAAPoAAAAZAABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACGHRyYWsAAABcdGtoZAAAAAMAAAAAAAAAAAAAAAEAAAAAAAAAZAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAgAAAAIAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAAGQAAAAAAAEAAAAAAZBtZGlhAAAAIG1kaGQAAAAAAAAAAAAAAAAAACgAAAAEAFXEAAAAAAAtaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAFZpZGVvSGFuZGxlcgAAAAE7bWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAA+3N0YmwAAACXc3RzZAAAAAAAAAABAAAAh2F2YzEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAgACAEgAAABIAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY//8AAAAxYXZjQwFkAAr/4QAYZ2QACqzZX4iIhAAAAwAEAAADAFA8SJZYAQAGaOvjyyLAAAAAGHN0dHMAAAAAAAAAAQAAAAEAAAQAAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAABAAAAAQAAABRzdHN6AAAAAAAAAsUAAAABAAAAFHN0Y28AAAAAAAAAAQAAADAAAABidWR0YQAAAFptZXRhAAAAAAAAACFoZGxyAAAAAAAAAABtZGlyYXBwbAAAAAAAAAAAAAAAAC1pbHN0AAAAJal0b28AAAAdZGF0YQAAAAEAAAAATGF2ZjU2LjQwLjEwMQ==';
      }
      else {
        addTest('videoautoplay', false);
        return;
      }
    }
 
    catch (e) {
      addTest('videoautoplay', false);
      return;
    }
 
    elem.setAttribute('autoplay', '');
    elem.style.cssText = 'display:none';
    docElement.appendChild(elem);
    // wait for the next tick to add the listener, otherwise the element may
    // not have time to play in high load situations (e.g. the test suite)
    setTimeout(function() {
      elem.addEventListener('playing', testAutoplay, false);
      timeout = setTimeout(testAutoplay, waitTime);
    }, 0);
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/video/crossorigin.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/video/crossorigin.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20                              2        
/*!
{
  "name": "Video crossOrigin",
  "property": "videocrossorigin",
  "caniuse": "cors",
  "authors": ["Florian Mailliet"],
  "notes": [{
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes"
  }]
}
!*/
/* DOC
Detects support for the crossOrigin attribute on video tag
*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('videocrossorigin', 'crossOrigin' in createElement('video'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/video/loop.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/video/loop.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12              2        
/*!
{
  "name": "Video Loop Attribute",
  "property": "videoloop",
  "tags": ["video", "media"]
}
!*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('videoloop', 'loop' in createElement('video'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/video/preload.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/video/preload.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12              2        
/*!
{
  "name": "Video Preload Attribute",
  "property": "videopreload",
  "tags": ["video", "media"]
}
!*/
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  Modernizr.addTest('videopreload', 'preload' in createElement('video'));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/webgl/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/webgl/

Statements: 5.56% (1 / 18)      Branches: 0% (0 / 6)      Functions: 0% (0 / 2)      Lines: 5.56% (1 / 18)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/webgl/
File Statements Branches Functions Lines
extensions.js 5.56% (1 / 18) 0% (0 / 6) 0% (0 / 2) 5.56% (1 / 18)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/webgl/extensions.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/webgl/extensions.js

Statements: 5.56% (1 / 18)      Branches: 0% (0 / 6)      Functions: 0% (0 / 2)      Lines: 5.56% (1 / 18)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67                                                      2                                                                              
/*!
{
  "name": "WebGL Extensions",
  "property": "webglextensions",
  "tags": ["webgl", "graphics"],
  "builderAliases": ["webgl_extensions"],
  "async" : true,
  "authors": ["Ilmari Heikkinen"],
  "knownBugs": [],
  "notes": [{
    "name": "Kronos extensions registry",
    "href": "http://www.khronos.org/registry/webgl/extensions/"
  }]
}
!*/
/* DOC
Detects support for OpenGL extensions in WebGL. It's `true` if the [WebGL extensions API](https://developer.mozilla.org/en-US/docs/Web/WebGL/Using_Extensions) is supported, then exposes the supported extensions as subproperties, e.g.:
 
```javascript
if (Modernizr.webglextensions) {
  // WebGL extensions API supported
}
if ('OES_vertex_array_object' in Modernizr.webglextensions) {
  // Vertex Array Objects extension supported
}
```
*/
define(['Modernizr', 'createElement', 'test/webgl'], function(Modernizr, createElement) {
  // based on code from ilmari heikkinen
  // code.google.com/p/graphics-detect/source/browse/js/detect.js
 
  // Not Async but handles it's own self
  Modernizr.addAsyncTest(function() {
 
    // Not a good candidate for css classes, so we avoid addTest stuff
    Modernizr.webglextensions = false;
 
    if (!Modernizr.webgl) {
      return;
    }
 
    var canvas;
    var ctx;
    var exts;
 
    try {
      canvas = createElement('canvas');
      ctx = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
      exts = ctx.getSupportedExtensions();
    }
    catch (e) {
      return;
    }
 
    if (ctx !== undefined) {
      Modernizr.webglextensions = new Boolean(true);
    }
 
    for (var i = -1, len = exts.length; ++i < len;) {
      Modernizr.webglextensions[exts[i]] = true;
    }
 
    canvas = undefined;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/webrtc/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/webrtc/

Statements: 21.43% (3 / 14)      Branches: 0% (0 / 4)      Functions: 0% (0 / 4)      Lines: 21.43% (3 / 14)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/webrtc/
File Statements Branches Functions Lines
datachannel.js 10% (1 / 10) 0% (0 / 4) 0% (0 / 2) 10% (1 / 10)
getusermedia.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
peerconnection.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/webrtc/datachannel.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/webrtc/datachannel.js

Statements: 10% (1 / 10)      Branches: 0% (0 / 4)      Functions: 0% (0 / 2)      Lines: 10% (1 / 10)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34                          2                                        
/*!
{
  "name": "RTC Data Channel",
  "property": "datachannel",
  "notes": [{
    "name": "HTML5 Rocks! Article",
    "href": "http://www.html5rocks.com/en/tutorials/webrtc/datachannels/"
  }]
}
!*/
/* DOC
Detect for the RTCDataChannel API that allows for transfer data directly from one peer to another
*/
define(['Modernizr', 'prefixed', 'domPrefixes', 'test/webrtc/peerconnection'], function(Modernizr, prefixed, domPrefixes) {
 
  Modernizr.addTest('datachannel', function() {
    if (!Modernizr.peerconnection) {
      return false;
    }
    for (var i = 0, l = domPrefixes.length; i < l; i++) {
      var PeerConnectionConstructor = window[domPrefixes[i] + 'RTCPeerConnection'];
 
      if (PeerConnectionConstructor) {
        var peerConnection = new PeerConnectionConstructor(null);
 
        return 'createDataChannel' in peerConnection;
      }
 
    }
    return false;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/webrtc/getusermedia.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/webrtc/getusermedia.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19                            2        
/*!
{
  "name": "getUserMedia",
  "property": "getusermedia",
  "caniuse": "stream",
  "tags": ["webrtc"],
  "authors": ["Eric Bidelman"],
  "notes": [{
    "name": "W3C Media Capture and Streams spec",
    "href": "https://www.w3.org/TR/mediacapture-streams/"
  }],
  "polyfills": ["getusermedia"]
}
!*/
define(['Modernizr', 'prefixed'], function(Modernizr, prefixed) {
  Modernizr.addTest('getusermedia', !!prefixed('getUserMedia', navigator));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/webrtc/peerconnection.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/webrtc/peerconnection.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17                        2        
/*!
{
  "name": "RTC Peer Connection",
  "property": "peerconnection",
  "tags": ["webrtc"],
  "authors": ["Ankur Oberoi"],
  "notes": [{
    "name": "W3C Web RTC spec",
    "href": "https://www.w3.org/TR/webrtc/"
  }]
}
!*/
define(['Modernizr', 'prefixed'], function(Modernizr, prefixed) {
  Modernizr.addTest('peerconnection', !!prefixed('RTCPeerConnection', window));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/websockets/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/websockets/

Statements: 10% (1 / 10)      Branches: 0% (0 / 6)      Functions: 0% (0 / 2)      Lines: 10% (1 / 10)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/websockets/
File Statements Branches Functions Lines
binary.js 10% (1 / 10) 0% (0 / 6) 0% (0 / 2) 10% (1 / 10)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/websockets/binary.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/websockets/binary.js

Statements: 10% (1 / 10)      Branches: 0% (0 / 6)      Functions: 0% (0 / 2)      Lines: 10% (1 / 10)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32                2                                              
/*!
{
  "name": "Binary WebSockets",
  "property": "websocketsbinary",
  "tags": ["websockets"],
  "builderAliases": ["websockets_binary"]
}
!*/
define(['Modernizr'], function(Modernizr) {
  // binaryType is truthy if there is support.. returns "blob" in new-ish chrome.
  // plus.google.com/115535723976198353696/posts/ERN6zYozENV
  // github.com/Modernizr/Modernizr/issues/370
 
  Modernizr.addTest('websocketsbinary', function() {
    var protocol = 'https:' == location.protocol ? 'wss' : 'ws',
      protoBin;
 
    if ('WebSocket' in window) {
      protoBin = 'binaryType' in WebSocket.prototype
      if (protoBin) {
        return protoBin;
      }
      try {
        return !!(new WebSocket(protocol + '://.').binaryType);
      } catch (e) {}
    }
 
    return false;
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/window/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/window/

Statements: 50% (3 / 6)      Branches: 0% (0 / 2)      Functions: 0% (0 / 3)      Lines: 50% (3 / 6)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/window/
File Statements Branches Functions Lines
atob-btoa.js 50% (1 / 2) 0% (0 / 2) 0% (0 / 1) 50% (1 / 2)
framed.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
matchmedia.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/window/atob-btoa.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/window/atob-btoa.js

Statements: 50% (1 / 2)      Branches: 0% (0 / 2)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28                                              2        
/*!
{
  "name": "Base 64 encoding/decoding",
  "property": ["atobbtoa"],
  "builderAliases": ["atob-btoa"],
  "caniuse" : "atob-btoa",
  "tags": ["atob", "base64", "WindowBase64", "btoa"],
  "authors": ["Christian Ulbrich"],
  "notes": [{
    "name": "WindowBase64",
    "href": "https://www.w3.org/TR/html5/webappapis.html#windowbase64"
  }, {
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/atob"
  }],
  "polyfills": ["base64js"]
}
!*/
/* DOC
 
Detects support for WindowBase64 API (window.atob && window.btoa).
 
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('atobbtoa', 'atob' in window && 'btoa' in window, {aliases: ['atob-btoa']});
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/window/framed.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/window/framed.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18                      2            
/*!
{
  "name": "Framed window",
  "property": "framed",
  "tags": ["window"],
  "builderAliases": ["window_framed"]
}
!*/
/* DOC
Tests if page is iframed.
*/
define(['Modernizr'], function(Modernizr) {
  // github.com/Modernizr/Modernizr/issues/242
 
  Modernizr.addTest('framed', window.location != top.location);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/window/matchmedia.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/window/matchmedia.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27                                            2        
/*!
{
  "name": "matchMedia",
  "property": "matchmedia",
  "caniuse" : "matchmedia",
  "tags": ["matchmedia"],
  "authors": ["Alberto Elias"],
  "notes": [{
    "name": "W3C CSSOM View Module",
    "href": "https://drafts.csswg.org/cssom-view/#the-mediaquerylist-interface"
  }, {
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en-US/docs/Web/API/Window.matchMedia"
  }],
  "polyfills": ["matchmediajs"]
}
!*/
/* DOC
 
Detects support for matchMedia.
 
*/
define(['Modernizr', 'prefixed'], function(Modernizr, prefixed) {
  Modernizr.addTest('matchmedia', !!prefixed('matchMedia', window));
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/workers/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/workers/

Statements: 11.54% (9 / 78)      Branches: 0% (0 / 32)      Functions: 0% (0 / 17)      Lines: 11.54% (9 / 78)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/feature-detects/workers/
File Statements Branches Functions Lines
blobworkers.js 8.82% (3 / 34) 0% (0 / 20) 0% (0 / 5) 8.82% (3 / 34)
dataworkers.js 6.25% (1 / 16) 100% (0 / 0) 0% (0 / 6) 6.25% (1 / 16)
sharedworkers.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
transferables.js 12.5% (3 / 24) 0% (0 / 12) 0% (0 / 4) 12.5% (3 / 24)
webworkers.js 50% (1 / 2) 100% (0 / 0) 0% (0 / 1) 50% (1 / 2)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/workers/blobworkers.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/workers/blobworkers.js

Statements: 8.82% (3 / 34)      Branches: 0% (0 / 20)      Functions: 0% (0 / 5)      Lines: 8.82% (3 / 34)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85                                    2                                                                                             1         1                            
/*!
{
  "name": "Workers from Blob URIs",
  "property": "blobworkers",
  "tags": ["performance", "workers"],
  "builderAliases": ["workers_blobworkers"],
  "notes": [{
    "name": "W3C Reference",
    "href": "https://www.w3.org/TR/workers/"
  }],
  "knownBugs": ["This test may output garbage to console."],
  "authors": ["Jussi Kalliokoski"],
  "async": true
}
!*/
/* DOC
Detects support for creating Web Workers from Blob URIs.
*/
define(['Modernizr', 'addTest'], function(Modernizr, addTest) {
  Modernizr.addAsyncTest(function() {
    try {
      // we're avoiding using Modernizr._domPrefixes as the prefix capitalization on
      // these guys are notoriously peculiar.
      var BlobBuilder = window.BlobBuilder;
      var URL         = window.URL;
      if (Modernizr._config.usePrefix) {
        BlobBuilder = BlobBuilder || window.MozBlobBuilder || window.WebKitBlobBuilder || window.MSBlobBuilder || window.OBlobBuilder;
        URL         = URL || window.MozURL || window.webkitURL || window.MSURL || window.OURL;
      }
      var data    = 'Modernizr',
        blob,
        bb,
        worker,
        url,
        timeout,
        scriptText = 'this.onmessage=function(e){postMessage(e.data)}';
 
      try {
        blob = new Blob([scriptText], {type: 'text/javascript'});
      } catch (e) {
        // we'll fall back to the deprecated BlobBuilder
      }
      if (!blob) {
        bb = new BlobBuilder();
        bb.append(scriptText);
        blob = bb.getBlob();
      }
 
      url = URL.createObjectURL(blob);
      worker = new Worker(url);
 
      worker.onmessage = function(e) {
        addTest('blobworkers', data === e.data);
        cleanup();
      };
 
      // Just in case...
      worker.onerror = fail;
      timeout = setTimeout(fail, 200);
 
      worker.postMessage(data);
    } catch (e) {
      fail();
    }
 
    function fail() {
      addTest('blobworkers', false);
      cleanup();
    }
 
    function cleanup() {
      if (url) {
        URL.revokeObjectURL(url);
      }
      if (worker) {
        worker.terminate();
      }
      if (timeout) {
        clearTimeout(timeout);
      }
    }
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/workers/dataworkers.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/workers/dataworkers.js

Statements: 6.25% (1 / 16)      Branches: 100% (0 / 0)      Functions: 0% (0 / 6)      Lines: 6.25% (1 / 16)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50                                    2                                                              
/*!
{
  "name": "Workers from Data URIs",
  "property": "dataworkers",
  "tags": ["performance", "workers"],
  "builderAliases": ["workers_dataworkers"],
  "notes": [{
    "name": "W3C Reference",
    "href": "https://www.w3.org/TR/workers/"
  }],
  "knownBugs": ["This test may output garbage to console."],
  "authors": ["Jussi Kalliokoski"],
  "async": true
}
!*/
/* DOC
Detects support for creating Web Workers from Data URIs.
*/
define(['Modernizr', 'addTest'], function(Modernizr, addTest) {
  Modernizr.addAsyncTest(function() {
    try {
      var data    = 'Modernizr',
        worker  = new Worker('data:text/javascript;base64,dGhpcy5vbm1lc3NhZ2U9ZnVuY3Rpb24oZSl7cG9zdE1lc3NhZ2UoZS5kYXRhKX0=');
 
      worker.onmessage = function(e) {
        worker.terminate();
        addTest('dataworkers', data === e.data);
        worker = null;
      };
 
      // Just in case...
      worker.onerror = function() {
        addTest('dataworkers', false);
        worker = null;
      };
 
      setTimeout(function() {
        addTest('dataworkers', false);
      }, 200);
 
      worker.postMessage(data);
    } catch (e) {
      setTimeout(function() {
        addTest('dataworkers', false);
      }, 0);
    }
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/workers/sharedworkers.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/workers/sharedworkers.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21                                2        
/*!
{
  "name": "Shared Workers",
  "property": "sharedworkers",
  "caniuse" : "sharedworkers",
  "tags": ["performance", "workers"],
  "builderAliases": ["workers_sharedworkers"],
  "notes": [{
    "name": "W3C Reference",
    "href": "https://www.w3.org/TR/workers/"
  }]
}
!*/
/* DOC
Detects support for the `SharedWorker` API from the Web Workers spec.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('sharedworkers', 'SharedWorker' in window);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/workers/transferables.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/workers/transferables.js

Statements: 12.5% (3 / 24)      Branches: 0% (0 / 12)      Functions: 0% (0 / 4)      Lines: 12.5% (3 / 24)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74                                2                                                                           1         1                            
/*!
{
  "name": "Transferables Objects",
  "property": "transferables",
  "tags": ["performance", "workers"],
  "builderAliases": ["transferables"],
  "notes": [{
    "name": "HTML5 Rocks article",
    "href": "http://updates.html5rocks.com/2011/12/Transferable-Objects-Lightning-Fast"
  }],
  "async": true
}
!*/
/* DOC
Detects whether web workers can use `transferables` objects.
*/
define(['Modernizr', 'addTest', 'test/blob', 'test/url/bloburls', 'test/workers/webworkers', 'test/typed-arrays'], function(Modernizr, addTest) {
  Modernizr.addAsyncTest(function() {
    var prerequisites = !!(Modernizr.blobconstructor &&
                           Modernizr.bloburls &&
                           Modernizr.webworkers &&
                           Modernizr.typedarrays);
 
    // Early exit
    if (!prerequisites) {
      return addTest('transferables', false);
    }
 
    // Proper test if prerequisites are met
    try {
      var buffer,
        scriptText = 'var hello = "world"',
        blob = new Blob([scriptText], {type: 'text/javascript'}),
        url = URL.createObjectURL(blob),
        worker = new Worker(url),
        timeout;
 
      // Just in case...
      worker.onerror = fail;
      timeout = setTimeout(fail, 200);
 
      // Building an minimal array buffer to send to the worker
      buffer = new ArrayBuffer(1);
 
      // Sending the buffer to the worker
      worker.postMessage(buffer, [buffer]);
 
      // If length of buffer is now 0, transferables are working
      addTest('transferables', buffer.byteLength === 0);
      cleanup();
    } catch (e) {
      fail();
    }
 
    function fail() {
      addTest('transferables', false);
      cleanup();
    }
 
    function cleanup() {
      if (url) {
        URL.revokeObjectURL(url);
      }
      if (worker) {
        worker.terminate();
      }
      if (timeout) {
        clearTimeout(timeout);
      }
    }
  });
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/workers/webworkers.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/feature-detects/workers/webworkers.js

Statements: 50% (1 / 2)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 50% (1 / 2)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27                                            2        
/*!
{
  "name": "Web Workers",
  "property": "webworkers",
  "caniuse" : "webworkers",
  "tags": ["performance", "workers"],
  "notes": [{
    "name": "W3C Reference",
    "href": "https://www.w3.org/TR/workers/"
  }, {
    "name": "HTML5 Rocks article",
    "href": "http://www.html5rocks.com/en/tutorials/workers/basics/"
  }, {
    "name": "MDN documentation",
    "href": "https://developer.mozilla.org/en-US/docs/Web/Guide/Performance/Using_web_workers"
  }],
  "polyfills": ["fakeworker", "html5shims"]
}
!*/
/* DOC
Detects support for the basic `Worker` API from the Web Workers spec. Web Workers provide a simple means for web content to run scripts in background threads.
*/
define(['Modernizr'], function(Modernizr) {
  Modernizr.addTest('webworkers', 'Worker' in window);
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/lib/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/lib/

Statements: 49.5% (100 / 202)      Branches: 40% (44 / 110)      Functions: 25% (7 / 28)      Lines: 49.75% (98 / 197)      Ignored: none     

All files » node-npmtest-modernizr/node_modules/modernizr/lib/
File Statements Branches Functions Lines
build.js 26.92% (21 / 78) 8.33% (3 / 36) 16.67% (2 / 12) 26.03% (19 / 73)
cli.js 100% (1 / 1) 100% (0 / 0) 100% (0 / 0) 100% (1 / 1)
generate-banner.js 8.33% (1 / 12) 0% (0 / 12) 0% (0 / 2) 8.33% (1 / 12)
metadata.js 85.9% (67 / 78) 82% (41 / 50) 100% (5 / 5) 85.9% (67 / 78)
options.js 30.3% (10 / 33) 0% (0 / 12) 0% (0 / 9) 30.3% (10 / 33)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/lib/build.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/lib/build.js

Statements: 26.92% (21 / 78)      Branches: 8.33% (3 / 36)      Functions: 16.67% (2 / 12)      Lines: 26.03% (19 / 73)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160      1   1                       1                                                                           1                                                                                                 1                                                   1 1 1   1 1   1 1             1   1     1 1 1 1 1          
// this file configures require.js based on enviroment
'use strict';
 
var inBrowser = typeof define == 'function' && typeof define.amd == 'object';
 
var _extend = function(a, b) {
  for (var prop in b) {
    var supplied = b[prop];
    if (Object.prototype.toString.call(supplied) === '[object Object]') {
      a[prop] = a[prop] || {};
      _extend(a[prop], supplied);
    } else {
      a[prop] = b[prop];
    }
  }
};
 
var baseRequireConfig = {
  optimize: 'none',
  generateSourceMaps: false,
  optimizeCss: 'none',
  useStrict: true,
  include: ['modernizr-init'],
  fileExclusionRegExp: /^(.git|node_modules|modulizr|media|test)$/,
  wrap: {
    start: '\n;(function(window, document, undefined){',
    end: '})(window, document);'
  },
  onBuildWrite: function(id, path, contents) {
    if (this.optimize === 'uglify2') {
      // strip out documentation comments
      contents = contents.replace(/\/\*\![\s\S]*\!\*\//m, '');
    }
 
    if ((/define\(.*?\{/).test(contents)) {
      // remove AMD ceremony for use without require.js or almond.js
      contents = contents.replace(/define\(.*?\{/, '');
 
      contents = contents.replace(/\}\);\s*?$/, '');
 
      if (!contents.match(/Modernizr\.add(Async)?Test\(/)) {
      // remove last return statement and trailing })
        contents = contents.replace(/return.*[^return]*$/, '');
      }
    } else if ((/require\([^\{]*?\{/).test(contents)) {
      contents = contents.replace(/require[^\{]+\{/, '');
      contents = contents.replace(/\}\);\s*$/, '');
    }
 
    contents = contents.replace(/return addTest;/, '');
 
    return contents;
  }
};
 
function build(generate, generateBanner, pkg) {
  return function build(config, cb) {
    var requireConfig = {};
    var banner;
    config = config || {};
    cb = cb || function noop() {};
 
    _extend(requireConfig, baseRequireConfig);
 
    requireConfig.rawText = {
      'modernizr-init': generate(config)
    };
 
    if (config.minify) {
      banner = generateBanner('compact', config);
      requireConfig.optimize = 'uglify2';
      requireConfig.uglify2 = {
        mangle: {
          except: ['Modernizr']
        },
        beautify: {
          ascii_only: true
        }
      };
    } else {
      banner = generateBanner('full', config);
      requireConfig.optimize = 'none';
    }
 
    requireConfig.out = function(output) {
      output = banner + output;
 
      // Remove `define('modernizr-init' ...)` and `define('modernizr-build' ...)`
      output = output.replace(/(,\s*)?define\("modernizr-(init|build)",\s*function\(\)\{\};?\)/g, '');
      output = output.replace(/__VERSION__/g, pkg.version);
 
      // Hack the prefix into place. Anything is way too big for something so small.
      if (config && config.classPrefix) {
        output = output.replace(/(classPrefix'?\s?:\s?)['""']{2}(,)/, '$1"' + config.classPrefix.replace(/"/g, '\\"') + '"$2');
      }
 
      cb(output);
 
    };
 
    requirejs.optimize(requireConfig);
  };
}
 
Iif (inBrowser) {
  var suppliedConfig = self._modernizrConfig;
  var metadataUrl = 'i/js/metadata.json';
  var packageUrl = 'i/js/modernizr-git/package.json';
  baseRequireConfig.baseUrl = '/i/js/modernizr-git/src';
  baseRequireConfig.paths = {
    text: '/i/js/requirejs-plugins/lib/text',
    lib: '/i/js/modernizr-git/lib',
    json: '/i/js/requirejs-plugins/src/json',
    lodash: '/i/js/lodash',
    test: '/i/js/modernizr-git/feature-detects'
  };
 
  if (suppliedConfig) {
    metadataUrl = suppliedConfig.metadataUrl || metadataUrl;
    packageUrl = suppliedConfig.packageUrl || packageUrl;
    _extend(baseRequireConfig, suppliedConfig);
  }
 
  if (self._modernizrMetadata) {
    requirejs.define('metadata', [], function() {return self._modernizrMetadata;});
  } else {
    requirejs.define('metadata', ['json!' + metadataUrl], function(pkg) {return pkg;});
  }
  requirejs.define('package', ['json!' + packageUrl], function(pkg) {return pkg;});
} else {
  var requirejs = require('requirejs');
  var metadata = require('./metadata')();
  var pkg = require('../package.json');
 
  requirejs.define('metadata', [], function() {return metadata;});
  requirejs.define('package', function() {return pkg;});
 
  baseRequireConfig.baseUrl = __dirname + '/../src';
  baseRequireConfig.paths = {
    lodash: __dirname + '/../node_modules/lodash/lodash',
    test: __dirname + '/../feature-detects',
    lib: __dirname
  };
}
 
requirejs.config(baseRequireConfig);
 
Iif (inBrowser) {
  define('build', ['generate', 'lib/generate-banner', 'package'], build);
} else {
  var generateBanner = requirejs(__dirname + '/generate-banner.js');
  var generate = requirejs('generate');
  var pkg = requirejs('package');
  var _build = build;
  module.exports = function build() {
    return _build(generate, generateBanner, pkg).apply(undefined, arguments);
  };
}
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/lib/cli.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/lib/cli.js

Statements: 100% (1 / 1)      Branches: 100% (0 / 0)      Functions: 100% (0 / 0)      Lines: 100% (1 / 1)      Ignored: none     

1 2 3 4 5 6 7 8 9    1            
'use strict';
 
module.exports = {
  build: require('./build'),
  metadata: require('./metadata'),
  options: require('./options'),
};
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/lib/generate-banner.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/lib/generate-banner.js

Statements: 8.33% (1 / 12)      Branches: 0% (0 / 12)      Functions: 0% (0 / 2)      Lines: 8.33% (1 / 12)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42  2                                                                                
/*global location, define*/
define(['lodash', 'package', 'lib/build-query'], function(_, pkg, buildQuery) {
  var domain = 'modernizr.com';
  if (typeof location !== 'undefined' && 'host' in location) {
    domain = location.host;
  }
 
  // Return a Modernizr file banner.
  // Usage:
  //   require('banners')(type);
  // Arguments:
  //   type (String, required): either 'compact' or 'full'.
 
  return function banners(type, config) {
    config = config || {};
    var query = buildQuery(config);
    if (!type || type === 'compact') {
      return '/*! ' + pkg.name + ' ' + pkg.version + ' (Custom Build) | ' + pkg.license  + ' *\n' +
        ' * https://' + domain + '/download/' + query +
        ' !*/\n';
    }
    else if (type === 'full') {
      return '/*!\n' +
        ' * ' + pkg.name + ' v' + pkg.version + '\n' +
        ' * Build https://' + domain + '/download' + query + '\n' +
        ' *\n' +
        ' * Copyright (c)\n *  ' + _.map(pkg.contributors, 'name').join('\n *  ') + '\n\n' +
        ' * ' + pkg.license + ' License\n */\n' +
      '\n' +
        '/*\n' +
        ' * Modernizr tests which native CSS3 and HTML5 features are available in the\n' +
        ' * current UA and makes the results available to you in two ways: as properties on\n' +
        ' * a global `Modernizr` object, and as classes on the `<html>` element. This\n' +
        ' * information allows you to progressively enhance your pages with a granular level\n' +
        ' * of control over the experience.\n*/\n';
    } else {
      throw 'banners() must be passed "compact" or "full" as an argument.';
    }
  };
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/lib/metadata.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/lib/metadata.js

Statements: 85.9% (67 / 78)      Branches: 82% (41 / 50)      Functions: 100% (5 / 5)      Lines: 85.9% (67 / 78)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 1431 1 1 1 1   1 1 1 1 32 269     269   269 269 269 269 269 269   269   269 269 269                 269   269 184     269   269 269   269 269 269       269 573 268   305         269   269 269 269   269       269 269 79 144 144             269   269 251     269 54     269 237     269 161     269 269           269                 269 43     269 149     269 245     269       1     1       1    
var fs = require('fs');
var file = require('file');
var Remarkable = require('remarkable');
var polyfills = require('./polyfills.json');
var viewRoot = fs.realpathSync(__dirname + '/../feature-detects');
 
function metadata(cb) {
  var tests = [];
  var md = new Remarkable();
  file.walkSync(viewRoot, function(start, dirs, files) {
    files.forEach(function(file) {
      Iif (file === '.DS_Store') {
        return;
      }
      var test = fs.readFileSync(start + '/' + file, 'utf8');
      // TODO :: make this regex not suck
      var metaRE = /\/\*\!([\s\S]*)\!\*\//m;
      var matches = test.match(metaRE);
      var docRE = /\/\*\sDOC([\s\S]*?)\*\//m;
      var docmatches = test.match(docRE);
      var depRE = /define\((\[[^\]]*\]),/;
      var depMatches = test.match(depRE);
 
      var metadata;
 
      Eif (matches && matches[1]) {
        try {
          metadata = JSON.parse(matches[1]);
        } catch (e) {
          throw new Error('Error Parsing Metadata: ' + file + '\nInput: `' + matches[1] + '`');
        }
      }
      else {
        metadata = {};
      }
 
      var docs = null;
 
      if (docmatches && docmatches[1]) {
        docs = md.render(docmatches[1].trim());
      }
 
      metadata.doc = docs;
 
      var deps = [];
      var matchedDeps;
 
      Eif (depMatches && depMatches[1]) {
        try {
          matchedDeps = JSON.parse(depMatches[1].replace(/'/g, '"'));
        } catch (e) {
          throw new Error('Couldn\'t parse dependencies for `' + file + '`:\n`' + depMatches[1] + '\n`');
        }
        matchedDeps.forEach(function(dep) {
          if (dep === 'Modernizr') {
            return;
          }
          deps.push(dep);
        });
      } else {
        throw new Error('Couldn\'t find the define for `' + file + '`');
      }
      metadata.deps = deps;
 
      var baseDir = __dirname.replace(/lib$/, '');
      metadata.path = './' + (start + '/' + file).replace(baseDir, '').replace(/\\/g, '/');
      metadata.amdPath = metadata.path.replace(/^\.\/feature\-detects/, 'test').replace(/\.js$/i, '');
 
      Iif (!metadata.name) {
        metadata.name = metadata.amdPath;
      }
 
      var pfs = [];
      if (metadata.polyfills && metadata.polyfills.length) {
        metadata.polyfills.forEach(function(polyname) {
          Eif (polyfills[polyname]) {
            pfs.push(polyfills[polyname]);
          }
          else {
            throw new Error(metadata.name + ': Polyfill not found in `' + file + '`: ' + polyname);
          }
        });
      }
      metadata.polyfills = pfs;
 
      if (!metadata.async) {
        metadata.async = false;
      }
 
      if (!metadata.notes) {
        metadata.notes = [];
      }
 
      if (!metadata.warnings) {
        metadata.warnings = [];
      }
 
      if (!metadata.caniuse) {
        metadata.caniuse = null;
      }
 
      Eif (!metadata.cssclass && metadata.property) {
        metadata.cssclass = metadata.property;
      } else {
        metadata.cssclass = null;
      }
 
      // Maybe catch a bug
      Iif (!metadata.doc && metadata.docs) {
        metadata.doc = metadata.docs;
        delete metadata.docs;
      }
 
      // If you want markdown parsed code minus the docs and metadata, this'll do it.
      // Off by default for now.
      // metadata.code =  md.render('```javascript\n' + test.replace(metaRE, '').replace(docRE, '') + '\n```');
 
      if (!metadata.tags) {
        metadata.tags = [];
      }
 
      if (!metadata.authors) {
        metadata.authors = [];
      }
 
      if (!metadata.knownBugs) {
        metadata.knownBugs = [];
      }
 
      tests.push(metadata);
    });
  });
 
  Iif (cb && typeof cb == 'function') {
    return cb(tests);
  }
  return tests;
}
 
 
module.exports = metadata;
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/lib/options.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/lib/options.js

Statements: 30.3% (10 / 33)      Branches: 0% (0 / 12)      Functions: 0% (0 / 9)      Lines: 30.3% (10 / 33)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 951 1 1 1 1 1 1   1       1                                                                                                                                                               1    
var fs = require('fs');
var _ = require('lodash');
var file = require('file');
var jsdoc = require('doctrine');
var srcRoot = fs.realpathSync(__dirname + '/../src');
var commentRE = /^(\s+)?(\/\*)?\*(\/)?\s?/mg;
var jsdocRE = /[^\S\r\n]*\/(?:\*{2})([\W\w]+?)\*\//mg;
 
var stripComments = function(str) {
  return str.replace(commentRE, '');
};
 
function options(cb, allMetadata) {
  var opts;
 
  file.walkSync(srcRoot, function(start, dirs, files) {
    opts = _.chain(files)
      .map(function(file) {
        var srcFile = fs.readFileSync(start + '/' + file, 'utf8');
        var docs = srcFile.match(jsdocRE);
 
        if (docs) {
          docs = docs
            .map(stripComments)
            .map(function(str) {
              return jsdoc.parse(str, {
                sloppy: true,
                tags: [
                  'access',
                  'author',
                  'class',
                  'example',
                  'function',
                  'memberOf',
                  'memberof',
                  'name',
                  'optionName',
                  'optionProp',
                  'param',
                  'params',
                  'preserve',
                  'private',
                  'returns',
                  'type'
                ]
              });
            });
 
          var option = _.chain(docs)
            .flatten()
            .filter(function(doc) {
              if (allMetadata) {
                return true;
              } else {
                return doc && _.some(doc.tags, {title: 'optionName'});
              }
            })
            .map(function(opt) {
              if (allMetadata) {
                return opt;
              } else {
                var tags = opt.tags.filter(function(tag) {
                  return tag.title.indexOf('option') === 0;
                });
 
                return {
                  name: _.filter(tags, {title: 'optionName'})[0].description,
                  property: _.filter(tags, {title: 'optionProp'})[0].description
                };
              }
            })
            .value();
 
          return option;
        }
      })
      .filter(function(doc) {
        return doc && doc.length;
      })
      .flatten()
      .value();
 
  });
 
  if (cb) {
    cb(opts);
  }
 
  return opts;
 
}
 
module.exports = options;
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/

Statements: 13.27% (99 / 746)      Branches: 1.91% (7 / 367)      Functions: 1.44% (2 / 139)      Lines: 13.29% (99 / 745)      Ignored: 11 statements, 2 functions, 7 branches     

All files » node-npmtest-modernizr/node_modules/modernizr/src/
File Statements Branches Functions Lines
Modernizr.js 20% (1 / 5) 100% (0 / 0) 0% (0 / 2) 20% (1 / 5)
ModernizrProto.js 12.5% (1 / 8) 100% (0 / 0) 0% (0 / 5) 12.5% (1 / 8)
addTest.js 4.65% (2 / 43) 0% (0 / 26) 0% (0 / 7) 4.65% (2 / 43)
atRule.js 4.76% (1 / 21) 0% (0 / 8) 0% (0 / 2) 4.76% (1 / 21)
classes.js 33.33% (1 / 3) 100% (0 / 0) 0% (0 / 1) 33.33% (1 / 3)
computedStyle.js 13.33% (2 / 15) 0% (0 / 13) 0% (0 / 2) 13.33% (2 / 15)
contains.js 50% (2 / 4) 100% (0 / 0) 0% (0 / 2) 50% (2 / 4)
createElement.js 25% (2 / 8) 0% (0 / 4) 0% (0 / 2) 25% (2 / 8)
cssToDOM.js 40% (2 / 5) 100% (0 / 0) 0% (0 / 3) 40% (2 / 5)
cssomPrefixes.js 25% (1 / 4) 0% (0 / 2) 0% (0 / 1) 25% (1 / 4)
docElement.js 33.33% (1 / 3) 100% (0 / 0) 0% (0 / 1) 33.33% (1 / 3)
domPrefixes.js 25% (1 / 4) 0% (0 / 2) 0% (0 / 1) 25% (1 / 4)
domToCSS.js 40% (2 / 5) 100% (0 / 0) 0% (0 / 3) 40% (2 / 5)
fnBind.js 40% (2 / 5) 100% (0 / 0) 0% (0 / 3) 40% (2 / 5)
generate.js 3.57% (1 / 28) 0% (0 / 16) 0% (0 / 4) 3.57% (1 / 28)
getBody.js 25% (2 / 8) 0% (0 / 4) 0% (0 / 2) 25% (2 / 8)
hasEvent.js 8.7% (2 / 23) 0% (0 / 16) 0% (0 / 3) 9.09% (2 / 22)
hasOwnProp.js 30% (3 / 10) 50% (3 / 6) 25% (1 / 4) 30% (3 / 10)
html5printshiv.js 8.93% (15 / 168) 0% (0 / 84) 0% (0 / 23) 8.93% (15 / 168)
html5shiv.js 9% (9 / 100) 0% (0 / 61) 0% (0 / 14) 9% (9 / 100)
injectElementWithStyles.js 5.41% (2 / 37) 0% (0 / 12) 0% (0 / 2) 5.41% (2 / 37)
inputElem.js 33.33% (1 / 3) 100% (0 / 0) 0% (0 / 1) 33.33% (1 / 3)
is.js 50% (2 / 4) 100% (0 / 0) 0% (0 / 2) 50% (2 / 4)
isSVG.js 33.33% (1 / 3) 100% (0 / 0) 0% (0 / 1) 33.33% (1 / 3)
load.js 6.67% (1 / 15) 0% (0 / 8) 0% (0 / 6) 6.67% (1 / 15)
mStyle.js 20% (1 / 5) 100% (0 / 0) 0% (0 / 2) 20% (1 / 5)
modElem.js 20% (1 / 5) 100% (0 / 0) 0% (0 / 2) 20% (1 / 5)
mq.js 7.14% (1 / 14) 0% (0 / 9) 0% (0 / 5) 7.14% (1 / 14)
nativeTestProps.js 11.76% (2 / 17) 0% (0 / 8) 0% (0 / 3) 11.76% (2 / 17)
omPrefixes.js 33.33% (1 / 3) 100% (0 / 0) 0% (0 / 1) 33.33% (1 / 3)
prefixed.js 10% (1 / 10) 0% (0 / 6) 0% (0 / 2) 10% (1 / 10)
prefixedCSS.js 20% (1 / 5) 0% (0 / 2) 0% (0 / 2) 20% (1 / 5)
prefixedCSSValue.js 5.88% (1 / 17) 0% (0 / 6) 0% (0 / 2) 5.88% (1 / 17)
prefixes.js 25% (1 / 4) 0% (0 / 2) 0% (0 / 1) 25% (1 / 4)
roundedEquals.js 50% (2 / 4) 0% (0 / 3) 0% (0 / 2) 50% (2 / 4)
setClasses.js 13.33% (2 / 15) 0% (0 / 10) 0% (0 / 2) 13.33% (2 / 15)
slice.js 33.33% (1 / 3) 100% (0 / 0) 0% (0 / 1) 33.33% (1 / 3)
testAllProps.js 40% (2 / 5) 100% (0 / 0) 0% (0 / 2) 40% (2 / 5)
testDOMProps.js 15.38% (2 / 13) 0% (0 / 8) 0% (0 / 2) 15.38% (2 / 13)
testProp.js 25% (1 / 4) 100% (0 / 0) 0% (0 / 2) 25% (1 / 4)
testProps.js 8.57% (3 / 35) 0% (0 / 24) 0% (0 / 3) 8.57% (3 / 35)
testPropsAll.js 22.22% (2 / 9) 0% (0 / 4) 0% (0 / 2) 22.22% (2 / 9)
testRunner.js 6.9% (2 / 29) 0% (0 / 19) 0% (0 / 2) 6.9% (2 / 29)
testStyles.js 33.33% (1 / 3) 100% (0 / 0) 0% (0 / 1) 33.33% (1 / 3)
testXhrType.js 90.91% (10 / 11) 100% (4 / 4) 50% (1 / 2) 90.91% (10 / 11)
toStringFn.js 33.33% (1 / 3) 100% (0 / 0) 0% (0 / 1) 33.33% (1 / 3)
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/Modernizr.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/Modernizr.js

Statements: 20% (1 / 5)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 20% (1 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 132                        
define(['ModernizrProto'], function(ModernizrProto) {
  // Fake some of Object.create so we can force non test results to be non "own" properties.
  var Modernizr = function() {};
  Modernizr.prototype = ModernizrProto;
 
  // Leak modernizr globally when you `require` it rather than force it here.
  // Overwrite name so constructor name is nicer :D
  Modernizr = new Modernizr();
 
  return Modernizr;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/ModernizrProto.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/ModernizrProto.js

Statements: 12.5% (1 / 8)      Branches: 100% (0 / 0)      Functions: 0% (0 / 5)      Lines: 12.5% (1 / 8)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 522                                                                                                      
define(['tests'], function(tests) {
  /**
   *
   * ModernizrProto is the constructor for Modernizr
   *
   * @class
   * @access public
   */
 
  var ModernizrProto = {
    // The current version, dummy
    _version: '__VERSION__',
 
    // Any settings that don't work as separate modules
    // can go in here as configuration.
    _config: {
      'classPrefix': '',
      'enableClasses': true,
      'enableJSClass': true,
      'usePrefixes': true
    },
 
    // Queue of tests
    _q: [],
 
    // Stub these for people who are listening
    on: function(test, cb) {
      // I don't really think people should do this, but we can
      // safe guard it a bit.
      // -- NOTE:: this gets WAY overridden in src/addTest for actual async tests.
      // This is in case people listen to synchronous tests. I would leave it out,
      // but the code to *disallow* sync tests in the real version of this
      // function is actually larger than this.
      var self = this;
      setTimeout(function() {
        cb(self[test]);
      }, 0);
    },
 
    addTest: function(name, fn, options) {
      tests.push({name: name, fn: fn, options: options});
    },
 
    addAsyncTest: function(fn) {
      tests.push({name: null, fn: fn});
    }
  };
 
  return ModernizrProto;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/addTest.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/addTest.js

Statements: 4.65% (2 / 43)      Branches: 0% (0 / 26)      Functions: 0% (0 / 7)      Lines: 4.65% (2 / 43)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 2102                                                                                                                                                                                                                                                                                                         1                                                                                                                        
define(['ModernizrProto', 'Modernizr', 'hasOwnProp', 'setClasses'], function(ModernizrProto, Modernizr, hasOwnProp, setClasses) {
 
   // _l tracks listeners for async tests, as well as tests that execute after the initial run
  ModernizrProto._l = {};
 
  /**
   * Modernizr.on is a way to listen for the completion of async tests. Being
   * asynchronous, they may not finish before your scripts run. As a result you
   * will get a possibly false negative `undefined` value.
   *
   * @memberof Modernizr
   * @name Modernizr.on
   * @access public
   * @function on
   * @param {string} feature - String name of the feature detect
   * @param {function} cb - Callback function returning a Boolean - true if feature is supported, false if not
   * @example
   *
   * ```js
   * Modernizr.on('flash', function( result ) {
   *   if (result) {
   *    // the browser has flash
   *   } else {
   *     // the browser does not have flash
   *   }
   * });
   * ```
   */
 
  ModernizrProto.on = function(feature, cb) {
    // Create the list of listeners if it doesn't exist
    if (!this._l[feature]) {
      this._l[feature] = [];
    }
 
    // Push this test on to the listener list
    this._l[feature].push(cb);
 
    // If it's already been resolved, trigger it on next tick
    if (Modernizr.hasOwnProperty(feature)) {
      // Next Tick
      setTimeout(function() {
        Modernizr._trigger(feature, Modernizr[feature]);
      }, 0);
    }
  };
 
  /**
   * _trigger is the private function used to signal test completion and run any
   * callbacks registered through [Modernizr.on](#modernizr-on)
   *
   * @memberof Modernizr
   * @name Modernizr._trigger
   * @access private
   * @function _trigger
   * @param {string} feature - string name of the feature detect
   * @param {function|boolean} [res] - A feature detection function, or the boolean =
   * result of a feature detection function
   */
 
  ModernizrProto._trigger = function(feature, res) {
    if (!this._l[feature]) {
      return;
    }
 
    var cbs = this._l[feature];
 
    // Force async
    setTimeout(function() {
      var i, cb;
      for (i = 0; i < cbs.length; i++) {
        cb = cbs[i];
        cb(res);
      }
    }, 0);
 
    // Don't trigger these again
    delete this._l[feature];
  };
 
  /**
   * addTest allows you to define your own feature detects that are not currently
   * included in Modernizr (under the covers it's the exact same code Modernizr
   * uses for its own [feature detections](https://github.com/Modernizr/Modernizr/tree/master/feature-detects)). Just like the offical detects, the result
   * will be added onto the Modernizr object, as well as an appropriate className set on
   * the html element when configured to do so
   *
   * @memberof Modernizr
   * @name Modernizr.addTest
   * @optionName Modernizr.addTest()
   * @optionProp addTest
   * @access public
   * @function addTest
   * @param {string|object} feature - The string name of the feature detect, or an
   * object of feature detect names and test
   * @param {function|boolean} test - Function returning true if feature is supported,
   * false if not. Otherwise a boolean representing the results of a feature detection
   * @example
   *
   * The most common way of creating your own feature detects is by calling
   * `Modernizr.addTest` with a string (preferably just lowercase, without any
   * punctuation), and a function you want executed that will return a boolean result
   *
   * ```js
   * Modernizr.addTest('itsTuesday', function() {
   *  var d = new Date();
   *  return d.getDay() === 2;
   * });
   * ```
   *
   * When the above is run, it will set Modernizr.itstuesday to `true` when it is tuesday,
   * and to `false` every other day of the week. One thing to notice is that the names of
   * feature detect functions are always lowercased when added to the Modernizr object. That
   * means that `Modernizr.itsTuesday` will not exist, but `Modernizr.itstuesday` will.
   *
   *
   *  Since we only look at the returned value from any feature detection function,
   *  you do not need to actually use a function. For simple detections, just passing
   *  in a statement that will return a boolean value works just fine.
   *
   * ```js
   * Modernizr.addTest('hasJquery', 'jQuery' in window);
   * ```
   *
   * Just like before, when the above runs `Modernizr.hasjquery` will be true if
   * jQuery has been included on the page. Not using a function saves a small amount
   * of overhead for the browser, as well as making your code much more readable.
   *
   * Finally, you also have the ability to pass in an object of feature names and
   * their tests. This is handy if you want to add multiple detections in one go.
   * The keys should always be a string, and the value can be either a boolean or
   * function that returns a boolean.
   *
   * ```js
   * var detects = {
   *  'hasjquery': 'jQuery' in window,
   *  'itstuesday': function() {
   *    var d = new Date();
   *    return d.getDay() === 2;
   *  }
   * }
   *
   * Modernizr.addTest(detects);
   * ```
   *
   * There is really no difference between the first methods and this one, it is
   * just a convenience to let you write more readable code.
   */
 
  function addTest(feature, test) {
 
    if (typeof feature == 'object') {
      for (var key in feature) {
        if (hasOwnProp(feature, key)) {
          addTest(key, feature[ key ]);
        }
      }
    } else {
 
      feature = feature.toLowerCase();
      var featureNameSplit = feature.split('.');
      var last = Modernizr[featureNameSplit[0]];
 
      // Again, we don't check for parent test existence. Get that right, though.
      if (featureNameSplit.length == 2) {
        last = last[featureNameSplit[1]];
      }
 
      if (typeof last != 'undefined') {
        // we're going to quit if you're trying to overwrite an existing test
        // if we were to allow it, we'd do this:
        //   var re = new RegExp("\\b(no-)?" + feature + "\\b");
        //   docElement.className = docElement.className.replace( re, '' );
        // but, no rly, stuff 'em.
        return Modernizr;
      }
 
      test = typeof test == 'function' ? test() : test;
 
      // Set the value (this is the magic, right here).
      if (featureNameSplit.length == 1) {
        Modernizr[featureNameSplit[0]] = test;
      } else {
        // cast to a Boolean, if not one already
        if (Modernizr[featureNameSplit[0]] && !(Modernizr[featureNameSplit[0]] instanceof Boolean)) {
          Modernizr[featureNameSplit[0]] = new Boolean(Modernizr[featureNameSplit[0]]);
        }
 
        Modernizr[featureNameSplit[0]][featureNameSplit[1]] = test;
      }
 
      // Set a single class (either `feature` or `no-feature`)
      setClasses([(!!test && test != false ? '' : 'no-') + featureNameSplit.join('-')]);
 
      // Trigger the event
      Modernizr._trigger(feature, test);
    }
 
    return Modernizr; // allow chaining.
  }
 
  // After all the tests are run, add self to the Modernizr prototype
  Modernizr._q.push(function() {
    ModernizrProto.addTest = addTest;
  });
 
  return addTest;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/atRule.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/atRule.js

Statements: 4.76% (1 / 21)      Branches: 0% (0 / 8)      Functions: 0% (0 / 2)      Lines: 4.76% (1 / 21)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 702                                                                                                                                          
define(['ModernizrProto', 'cssomPrefixes'], function(ModernizrProto, prefixes) {
  /**
   * atRule returns a given CSS property at-rule (eg @keyframes), possibly in
   * some prefixed form, or false, in the case of an unsupported rule
   *
   * @memberof Modernizr
   * @name Modernizr.atRule
   * @optionName Modernizr.atRule()
   * @optionProp atRule
   * @access public
   * @function atRule
   * @param {string} prop - String name of the @-rule to test for
   * @returns {string|boolean} The string representing the (possibly prefixed)
   * valid version of the @-rule, or `false` when it is unsupported.
   * @example
   * ```js
   *  var keyframes = Modernizr.atRule('@keyframes');
   *
   *  if (keyframes) {
   *    // keyframes are supported
   *    // could be `@-webkit-keyframes` or `@keyframes`
   *  } else {
   *    // keyframes === `false`
   *  }
   * ```
   *
   */
 
  var atRule = function(prop) {
    var length = prefixes.length;
    var cssrule = window.CSSRule;
    var rule;
 
    if (typeof cssrule === 'undefined') {
      return undefined;
    }
 
    if (!prop) {
      return false;
    }
 
    // remove literal @ from beginning of provided property
    prop = prop.replace(/^@/, '');
 
    // CSSRules use underscores instead of dashes
    rule = prop.replace(/-/g, '_').toUpperCase() + '_RULE';
 
    if (rule in cssrule) {
      return '@' + prop;
    }
 
    for (var i = 0; i < length; i++) {
      // prefixes gives us something like -o-, and we want O_
      var prefix = prefixes[i];
      var thisRule = prefix.toUpperCase() + '_' + rule;
 
      if (thisRule in cssrule) {
        return '@-' + prefix.toLowerCase() + '-' + prop;
      }
    }
 
    return false;
  };
 
  ModernizrProto.atRule = atRule;
 
  return atRule;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/classes.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/classes.js

Statements: 33.33% (1 / 3)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 62          
define(function() {
  var classes = [];
  return classes;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/computedStyle.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/computedStyle.js

Statements: 13.33% (2 / 15)      Branches: 0% (0 / 13)      Functions: 0% (0 / 2)      Lines: 13.33% (2 / 15)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 412                         1                                                      
define(function() {
 
  /**
   * wrapper around getComputedStyle, to fix issues with Firefox returning null when
   * called inside of a hidden iframe
   *
   * @access private
   * @function computedStyle
   * @param {HTMLElement|SVGElement} - The element we want to find the computed styles of
   * @param {string|null} [pseudoSelector]- An optional pseudo element selector (e.g. :before), of null if none
   * @returns {CSSStyleDeclaration}
   */
 
  function computedStyle(elem, pseudo, prop) {
    var result;
 
    if ('getComputedStyle' in window) {
      result = getComputedStyle.call(window, elem, pseudo);
      var console = window.console;
 
      if (result !== null) {
        if (prop) {
          result = result.getPropertyValue(prop);
        }
      } else {
        if (console) {
          var method = console.error ? 'error' : 'log';
          console[method].call(console, 'getComputedStyle returning null, its possible modernizr test results are inaccurate');
        }
      }
    } else {
      result = !pseudo && elem.currentStyle && elem.currentStyle[prop];
    }
 
    return result;
  }
 
  return computedStyle;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/contains.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/contains.js

Statements: 50% (2 / 4)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 50% (2 / 4)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 202                       1              
define(function() {
 
  /**
   * contains checks to see if a string contains another string
   *
   * @access private
   * @function contains
   * @param {string} str - The string we want to check for substrings
   * @param {string} substr - The substring we want to search the first string for
   * @returns {boolean}
   */
 
  function contains(str, substr) {
    return !!~('' + str).indexOf(substr);
  }
 
  return contains;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/createElement.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/createElement.js

Statements: 25% (2 / 8)      Branches: 0% (0 / 4)      Functions: 0% (0 / 2)      Lines: 25% (2 / 8)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 282                       1                              
define(['isSVG'], function(isSVG) {
  /**
   * createElement is a convenience wrapper around document.createElement. Since we
   * use createElement all over the place, this allows for (slightly) smaller code
   * as well as abstracting away issues with creating elements in contexts other than
   * HTML documents (e.g. SVG documents).
   *
   * @access private
   * @function createElement
   * @returns {HTMLElement|SVGElement} An HTML or SVG element
   */
 
  function createElement() {
    if (typeof document.createElement !== 'function') {
      // This is the case in IE7, where the type of createElement is "object".
      // For this reason, we cannot call apply() as Object is not a Function.
      return document.createElement(arguments[0]);
    } else if (isSVG) {
      return document.createElementNS.call(document, 'http://www.w3.org/2000/svg', arguments[0]);
    } else {
      return document.createElement.apply(document, arguments);
    }
  }
 
  return createElement;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/cssToDOM.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/cssToDOM.js

Statements: 40% (2 / 5)      Branches: 100% (0 / 0)      Functions: 0% (0 / 3)      Lines: 40% (2 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 202                     1                
define(function() {
  /**
   * cssToDOM takes a kebab-case string and converts it to camelCase
   * e.g. box-sizing -> boxSizing
   *
   * @access private
   * @function cssToDOM
   * @param {string} name - String name of kebab-case prop we want to convert
   * @returns {string} The camelCase version of the supplied name
   */
 
  function cssToDOM(name) {
    return name.replace(/([a-z])-([a-z])/g, function(str, m1, m2) {
      return m1 + m2.toUpperCase();
    }).replace(/^-/, '');
  }
  return cssToDOM;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/cssomPrefixes.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/cssomPrefixes.js

Statements: 25% (1 / 4)      Branches: 0% (0 / 2)      Functions: 0% (0 / 1)      Lines: 25% (1 / 4)      Ignored: none     

1 2 3 4 5 6 72            
define(['ModernizrProto', 'omPrefixes'], function(ModernizrProto, omPrefixes) {
  var cssomPrefixes = (ModernizrProto._config.usePrefixes ? omPrefixes.split(' ') : []);
  ModernizrProto._cssomPrefixes = cssomPrefixes;
  return cssomPrefixes;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/docElement.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/docElement.js

Statements: 33.33% (1 / 3)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 132                        
define(function() {
  /**
   * docElement is a convenience wrapper to grab the root element of the document
   *
   * @access private
   * @returns {HTMLElement|SVGElement} The root element of the document
   */
 
  var docElement = document.documentElement;
  return docElement;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/domPrefixes.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/domPrefixes.js

Statements: 25% (1 / 4)      Branches: 0% (0 / 2)      Functions: 0% (0 / 1)      Lines: 25% (1 / 4)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 252                                                
define(['ModernizrProto', 'omPrefixes'], function(ModernizrProto, omPrefixes) {
  /**
   * List of JavaScript DOM values used for tests
   *
   * @memberof Modernizr
   * @name Modernizr._domPrefixes
   * @optionName Modernizr._domPrefixes
   * @optionProp domPrefixes
   * @access public
   * @example
   *
   * Modernizr._domPrefixes is exactly the same as [_prefixes](#modernizr-_prefixes), but rather
   * than kebab-case properties, all properties are their Capitalized variant
   *
   * ```js
   * Modernizr._domPrefixes === [ "Moz", "O", "ms", "Webkit" ];
   * ```
   */
 
  var domPrefixes = (ModernizrProto._config.usePrefixes ? omPrefixes.toLowerCase().split(' ') : []);
  ModernizrProto._domPrefixes = domPrefixes;
  return domPrefixes;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/domToCSS.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/domToCSS.js

Statements: 40% (2 / 5)      Branches: 100% (0 / 0)      Functions: 0% (0 / 3)      Lines: 40% (2 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 202                     1                
define(function() {
  /**
   * domToCSS takes a camelCase string and converts it to kebab-case
   * e.g. boxSizing -> box-sizing
   *
   * @access private
   * @function domToCSS
   * @param {string} name - String name of camelCase prop we want to convert
   * @returns {string} The kebab-case version of the supplied name
   */
 
  function domToCSS(name) {
    return name.replace(/([A-Z])/g, function(str, m1) {
      return '-' + m1.toLowerCase();
    }).replace(/^ms-/, '-ms-');
  }
  return domToCSS;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/fnBind.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/fnBind.js

Statements: 40% (2 / 5)      Branches: 100% (0 / 0)      Functions: 0% (0 / 3)      Lines: 40% (2 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 212                     1                  
define(function() {
  /**
   * fnBind is a super small [bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) polyfill.
   *
   * @access private
   * @function fnBind
   * @param {function} fn - a function you want to change `this` reference to
   * @param {object} that - the `this` you want to call the function with
   * @returns {function} The wrapped version of the supplied function
   */
 
  function fnBind(fn, that) {
    return function() {
      return fn.apply(that, arguments);
    };
  }
 
  return fnBind;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/generate.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/generate.js

Statements: 3.57% (1 / 28)      Branches: 0% (0 / 16)      Functions: 0% (0 / 4)      Lines: 3.57% (1 / 28)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 892                                                                                                                                                                                
define(['lodash'], function(_) {
  /**
   * generate creates the base version of a Modernizr build, before the r.js
   * optimizer actually generates the final code
   *
   * @access private
   * @function generate
   * @param {object} [config] - A configuration object
   * @param {array} [config.options[]] - An array of options to include in the build
   * @param {array} [config.feature-detects[]] - An array of the feature detects to include
   * @returns {string} A string of the require.js build
   */
 
  return function generate(config) {
    // Set some defaults
    if (!config) {
      config = {};
    }
 
    config.options = config.options || [];
    config['feature-detects'] = config['feature-detects'] || [];
 
    // Some special cases
    var setClasses = _.includes(config.options, 'setClasses');
 
    var output = 'require(["ModernizrProto", "Modernizr", "testRunner"';
 
    // Needed named module requires
    if (setClasses) {
      output += ', "setClasses", "classes"';
    }
 
    // Only allow one shiv at a time
    if (_.includes(config.options, 'html5printshiv')) {
      config.options = _.without(config.options, 'html5shiv');
    }
 
    // Load in the rest of the options, excluding special cases
    // (they dont return values, so they aren't declared)
    _.forEach(_.without(config.options, 'setClasses'), function(option) {
      output += ', "' + option + '"';
    });
 
    // Load in all the detects
    _.forEach(config['feature-detects'], function(detect) {
      detect = detect.indexOf('test/') === 0 ? detect : 'test/' + detect;
      output += ', "' + detect + '"';
    });
 
    output += '], function( ModernizrProto, Modernizr, testRunner';
 
    // Needed named module declarations
    if (setClasses) {
      output += ', setClasses, classes';
    }
 
    output += ') {\n' +
    '  // Run each test\n' +
    '  testRunner();\n' +
    '\n';
 
    // Actually run the setClasses function
    if (setClasses) {
      output += '  // Remove the "no-js" class if it exists\n' +
      '  setClasses(classes);\n' +
      '\n';
    }
 
    output += '  delete ModernizrProto.addTest;\n';
    output += '  delete ModernizrProto.addAsyncTest;\n' +
    '\n';
 
    // TODO:: if there's a way to figure out if there will be no
    // items in this queue, then we could avoid the code.
    output += '  // Run the things that are supposed to run after the tests\n' +
    '  for (var i = 0; i < Modernizr._q.length; i++) {\n' +
    '    Modernizr._q[i]();\n' +
    '  }\n\n';
 
    output += '  // Leak Modernizr namespace\n' +
    '  window.Modernizr = Modernizr;\n' +
    '\n' +
    '});';
 
    return output;
  };
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/getBody.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/getBody.js

Statements: 25% (2 / 8)      Branches: 0% (0 / 4)      Functions: 0% (0 / 2)      Lines: 25% (2 / 8)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 282                     1                                
define(['createElement', 'isSVG'], function(createElement, isSVG) {
  /**
   * getBody returns the body of a document, or an element that can stand in for
   * the body if a real body does not exist
   *
   * @access private
   * @function getBody
   * @returns {HTMLElement|SVGElement} Returns the real body of a document, or an
   * artificially created element that stands in for the body
   */
 
  function getBody() {
    // After page load injecting a fake body doesn't work so check if body exists
    var body = document.body;
 
    if (!body) {
      // Can't use the real body create a fake one.
      body = createElement(isSVG ? 'svg' : 'body');
      body.fake = true;
    }
 
    return body;
  }
 
  return getBody;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/hasEvent.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/hasEvent.js

Statements: 8.7% (2 / 23)      Branches: 0% (0 / 16)      Functions: 0% (0 / 3)      Lines: 9.09% (2 / 22)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 792                                                                       1                                                                                    
define(['ModernizrProto', 'createElement'], function(ModernizrProto, createElement) {
  /**
   * Modernizr.hasEvent() detects support for a given event
   *
   * @memberof Modernizr
   * @name Modernizr.hasEvent
   * @optionName Modernizr.hasEvent()
   * @optionProp hasEvent
   * @access public
   * @function hasEvent
   * @param  {string|*} eventName - the name of an event to test for (e.g. "resize")
   * @param  {Element|string} [element=HTMLDivElement] - is the element|document|window|tagName to test on
   * @returns {boolean}
   * @example
   *  `Modernizr.hasEvent` lets you determine if the browser supports a supplied event.
   *  By default, it does this detection on a div element
   *
   * ```js
   *  hasEvent('blur') // true;
   * ```
   *
   * However, you are able to give an object as a second argument to hasEvent to
   * detect an event on something other than a div.
   *
   * ```js
   *  hasEvent('devicelight', window) // true;
   * ```
   *
   */
 
  var hasEvent = (function() {
 
    // Detect whether event support can be detected via `in`. Test on a DOM element
    // using the "blur" event b/c it should always exist. bit.ly/event-detection
    var needsFallback = !('onblur' in document.documentElement);
 
    function inner(eventName, element) {
 
      var isSupported;
      if (!eventName) { return false; }
      if (!element || typeof element === 'string') {
        element = createElement(element || 'div');
      }
 
      // Testing via the `in` operator is sufficient for modern browsers and IE.
      // When using `setAttribute`, IE skips "unload", WebKit skips "unload" and
      // "resize", whereas `in` "catches" those.
      eventName = 'on' + eventName;
      isSupported = eventName in element;
 
      // Fallback technique for old Firefox - bit.ly/event-detection
      if (!isSupported && needsFallback) {
        if (!element.setAttribute) {
          // Switch to generic element if it lacks `setAttribute`.
          // It could be the `document`, `window`, or something else.
          element = createElement('div');
        }
 
        element.setAttribute(eventName, '');
        isSupported = typeof element[eventName] === 'function';
 
        if (element[eventName] !== undefined) {
          // If property was created, "remove it" by setting value to `undefined`.
          element[eventName] = undefined;
        }
        element.removeAttribute(eventName);
      }
 
      return isSupported;
    }
    return inner;
  })();
 
 
  ModernizrProto.hasEvent = hasEvent;
  return hasEvent;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/hasOwnProp.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/hasOwnProp.js

Statements: 30% (3 / 10)      Branches: 50% (3 / 6)      Functions: 25% (1 / 4)      Lines: 30% (3 / 10)      Ignored: 2 statements, 1 function, 3 branches     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 362                                                   1 1                
define(['is'], function(is) {
  /**
   * hasOwnProp is a shim for hasOwnProperty that is needed for Safari 2.0 support
   *
   * @author kangax
   * @access private
   * @function hasOwnProp
   * @param {object} object - The object to check for a property
   * @param {string} property - The property to check for
   * @returns {boolean}
   */
 
  // hasOwnProperty shim by kangax needed for Safari 2.0 support
  var hasOwnProp;
 
  (function() {
    var _hasOwnProperty = ({}).hasOwnProperty;
    /* istanbul ignore else */
    /* we have no way of testing IE 5.5 or safari 2,
     * so just assume the else gets hit */
    if (!is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined')) {
      hasOwnProp = function(object, property) {
        return _hasOwnProperty.call(object, property);
      };
    }
    else {
      hasOwnProp = function(object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */
        return ((property in object) && is(object.constructor.prototype[property], 'undefined'));
      };
    }
  })();
 
  return hasOwnProp;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/html5printshiv.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/html5printshiv.js

Statements: 8.93% (15 / 168)      Branches: 0% (0 / 84)      Functions: 0% (0 / 23)      Lines: 8.93% (15 / 168)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 5392                                                                                                                                                     1                         1                     1                                   1                                   1                                                                       1                                               1                                                                           1                                                                                                                                                                                                                                                             1                                           1                                             1                                       1                             1                           1                                                                                                                                                                        
define(['isSVG'], function(isSVG) {
/**
  * @optionName html5printshiv
  * @optionProp html5printshiv
  */
 
  // Take the html5 variable out of the html5shiv scope so we can return it.
  var html5;
  if (!isSVG) {
 
    /**
     * @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
     */
    ;(function(window, document) {
      /** version */
      var version = '3.7.3';
 
      /** Preset options */
      var options = window.html5 || {};
 
      /** Used to skip problem elements */
      var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;
 
      /** Not all elements can be cloned in IE **/
      var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;
 
      /** Detect whether the browser supports default html5 styles */
      var supportsHtml5Styles;
 
      /** Name of the expando, to work with multiple documents or to re-shiv one document */
      var expando = '_html5shiv';
 
      /** The id for the the documents expando */
      var expanID = 0;
 
      /** Cached data for each document */
      var expandoData = {};
 
      /** Detect whether the browser supports unknown elements */
      var supportsUnknownElements;
 
      (function() {
        try {
          var a = document.createElement('a');
          a.innerHTML = '<xyz></xyz>';
          //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles
          supportsHtml5Styles = ('hidden' in a);
 
          supportsUnknownElements = a.childNodes.length == 1 || (function() {
            // assign a false positive if unable to shiv
            (document.createElement)('a');
            var frag = document.createDocumentFragment();
            return (
              typeof frag.cloneNode == 'undefined' ||
                typeof frag.createDocumentFragment == 'undefined' ||
                typeof frag.createElement == 'undefined'
            );
          }());
        } catch(e) {
          // assign a false positive if detection fails => unable to shiv
          supportsHtml5Styles = true;
          supportsUnknownElements = true;
        }
 
      }());
 
      /*--------------------------------------------------------------------------*/
 
      /**
       * Creates a style sheet with the given CSS text and adds it to the document.
       * @private
       * @param {Document} ownerDocument The document.
       * @param {String} cssText The CSS text.
       * @returns {StyleSheet} The style element.
       */
      function addStyleSheet(ownerDocument, cssText) {
        var p = ownerDocument.createElement('p'),
          parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;
 
        p.innerHTML = 'x<style>' + cssText + '</style>';
        return parent.insertBefore(p.lastChild, parent.firstChild);
      }
 
      /**
       * Returns the value of `html5.elements` as an array.
       * @private
       * @returns {Array} An array of shived element node names.
       */
      function getElements() {
        var elements = html5.elements;
        return typeof elements == 'string' ? elements.split(' ') : elements;
      }
 
      /**
       * Extends the built-in list of html5 elements
       * @memberOf html5
       * @param {String|Array} newElements whitespace separated list or array of new element names to shiv
       * @param {Document} ownerDocument The context document.
       */
      function addElements(newElements, ownerDocument) {
        var elements = html5.elements;
        if(typeof elements != 'string'){
          elements = elements.join(' ');
        }
        if(typeof newElements != 'string'){
          newElements = newElements.join(' ');
        }
        html5.elements = elements +' '+ newElements;
        shivDocument(ownerDocument);
      }
 
      /**
       * Returns the data associated to the given document
       * @private
       * @param {Document} ownerDocument The document.
       * @returns {Object} An object of data.
       */
      function getExpandoData(ownerDocument) {
        var data = expandoData[ownerDocument[expando]];
        if (!data) {
          data = {};
          expanID++;
          ownerDocument[expando] = expanID;
          expandoData[expanID] = data;
        }
        return data;
      }
 
      /**
       * returns a shived element for the given nodeName and document
       * @memberOf html5
       * @param {String} nodeName name of the element
       * @param {Document} ownerDocument The context document.
       * @returns {Object} The shived element.
       */
      function createElement(nodeName, ownerDocument, data){
        if (!ownerDocument) {
          ownerDocument = document;
        }
        if(supportsUnknownElements){
          return ownerDocument.createElement(nodeName);
        }
        if (!data) {
          data = getExpandoData(ownerDocument);
        }
        var node;
 
        if (data.cache[nodeName]) {
          node = data.cache[nodeName].cloneNode();
        } else if (saveClones.test(nodeName)) {
          node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();
        } else {
          node = data.createElem(nodeName);
        }
 
        // Avoid adding some elements to fragments in IE < 9 because
        // * Attributes like `name` or `type` cannot be set/changed once an element
        //   is inserted into a document/fragment
        // * Link elements with `src` attributes that are inaccessible, as with
        //   a 403 response, will cause the tab/window to crash
        // * Script elements appended to fragments will execute when their `src`
        //   or `text` property is set
        return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;
      }
 
      /**
       * returns a shived DocumentFragment for the given document
       * @memberOf html5
       * @param {Document} ownerDocument The context document.
       * @returns {Object} The shived DocumentFragment.
       */
      function createDocumentFragment(ownerDocument, data){
        if (!ownerDocument) {
          ownerDocument = document;
        }
        if(supportsUnknownElements){
          return ownerDocument.createDocumentFragment();
        }
        data = data || getExpandoData(ownerDocument);
        var clone = data.frag.cloneNode(),
          i = 0,
          elems = getElements(),
          l = elems.length;
        for(;i<l;i++){
          clone.createElement(elems[i]);
        }
        return clone;
      }
 
      /**
       * Shivs the `createElement` and `createDocumentFragment` methods of the document.
       * @private
       * @param {Document|DocumentFragment} ownerDocument The document.
       * @param {Object} data of the document.
       */
      function shivMethods(ownerDocument, data) {
        if (!data.cache) {
          data.cache = {};
          data.createElem = ownerDocument.createElement;
          data.createFrag = ownerDocument.createDocumentFragment;
          data.frag = data.createFrag();
        }
 
 
        ownerDocument.createElement = function(nodeName) {
          //abort shiv
          if (!html5.shivMethods) {
            return data.createElem(nodeName);
          }
          return createElement(nodeName, ownerDocument, data);
        };
 
        ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +
                                                        'var n=f.cloneNode(),c=n.createElement;' +
                                                        'h.shivMethods&&(' +
                                                        // unroll the `createElement` calls
                                                        getElements().join().replace(/[\w\-:]+/g, function(nodeName) {
                                                          data.createElem(nodeName);
                                                          data.frag.createElement(nodeName);
                                                          return 'c("' + nodeName + '")';
                                                        }) +
          ');return n}'
                                                       )(html5, data.frag);
      }
 
      /*--------------------------------------------------------------------------*/
 
      /**
       * Shivs the given document.
       * @memberOf html5
       * @param {Document} ownerDocument The document to shiv.
       * @returns {Document} The shived document.
       */
      function shivDocument(ownerDocument) {
        if (!ownerDocument) {
          ownerDocument = document;
        }
        var data = getExpandoData(ownerDocument);
 
        if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {
          data.hasCSS = !!addStyleSheet(ownerDocument,
                                        // corrects block display not defined in IE6/7/8/9
                                        'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' +
                                        // adds styling not present in IE6/7/8/9
                                        'mark{background:#FF0;color:#000}' +
                                        // hides non-rendered elements
                                        'template{display:none}'
                                       );
        }
        if (!supportsUnknownElements) {
          shivMethods(ownerDocument, data);
        }
        return ownerDocument;
      }
 
      /*--------------------------------------------------------------------------*/
 
      /**
       * The `html5` object is exposed so that more elements can be shived and
       * existing shiving can be detected on iframes.
       * @type Object
       * @example
       *
       * // options can be changed before the script is included
       * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };
       */
      var html5 = {
 
        /**
         * An array or space separated string of node names of the elements to shiv.
         * @memberOf html5
         * @type Array|String
         */
        'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video',
 
        /**
         * current version of html5shiv
         */
        'version': version,
 
        /**
         * A flag to indicate that the HTML5 style sheet should be inserted.
         * @memberOf html5
         * @type Boolean
         */
        'shivCSS': (options.shivCSS !== false),
 
        /**
         * Is equal to true if a browser supports creating unknown/HTML5 elements
         * @memberOf html5
         * @type boolean
         */
        'supportsUnknownElements': supportsUnknownElements,
 
        /**
         * A flag to indicate that the document's `createElement` and `createDocumentFragment`
         * methods should be overwritten.
         * @memberOf html5
         * @type Boolean
         */
        'shivMethods': (options.shivMethods !== false),
 
        /**
         * A string to describe the type of `html5` object ("default" or "default print").
         * @memberOf html5
         * @type String
         */
        'type': 'default',
 
        // shivs the document according to the specified `html5` object options
        'shivDocument': shivDocument,
 
        //creates a shived element
        createElement: createElement,
 
        //creates a shived documentFragment
        createDocumentFragment: createDocumentFragment,
 
        //extends list of elements
        addElements: addElements
      };
 
      /*--------------------------------------------------------------------------*/
 
      // expose html5
      window.html5 = html5;
 
      // shiv the document
      shivDocument(document);
 
      /*------------------------------- Print Shiv -------------------------------*/
 
      /** Used to filter media types */
      var reMedia = /^$|\b(?:all|print)\b/;
 
      /** Used to namespace printable elements */
      var shivNamespace = 'html5shiv';
 
      /** Detect whether the browser supports shivable style sheets */
      var supportsShivableSheets = !supportsUnknownElements && (function() {
        // assign a false negative if unable to shiv
        var docEl = document.documentElement;
        return !(
          typeof document.namespaces == 'undefined' ||
            typeof document.parentWindow == 'undefined' ||
            typeof docEl.applyElement == 'undefined' ||
            typeof docEl.removeNode == 'undefined' ||
            typeof window.attachEvent == 'undefined'
        );
      }());
 
      /*--------------------------------------------------------------------------*/
 
      /**
       * Wraps all HTML5 elements in the given document with printable elements.
       * (eg. the "header" element is wrapped with the "html5shiv:header" element)
       * @private
       * @param {Document} ownerDocument The document.
       * @returns {Array} An array wrappers added.
       */
      function addWrappers(ownerDocument) {
        var node,
          nodes = ownerDocument.getElementsByTagName('*'),
          index = nodes.length,
          reElements = RegExp('^(?:' + getElements().join('|') + ')$', 'i'),
          result = [];
 
        while (index--) {
          node = nodes[index];
          if (reElements.test(node.nodeName)) {
            result.push(node.applyElement(createWrapper(node)));
          }
        }
        return result;
      }
 
      /**
       * Creates a printable wrapper for the given element.
       * @private
       * @param {Element} element The element.
       * @returns {Element} The wrapper.
       */
      function createWrapper(element) {
        var node,
          nodes = element.attributes,
          index = nodes.length,
          wrapper = element.ownerDocument.createElement(shivNamespace + ':' + element.nodeName);
 
        // copy element attributes to the wrapper
        while (index--) {
          node = nodes[index];
          node.specified && wrapper.setAttribute(node.nodeName, node.nodeValue);
        }
        // copy element styles to the wrapper
        wrapper.style.cssText = element.style.cssText;
        return wrapper;
      }
 
      /**
       * Shivs the given CSS text.
       * (eg. header{} becomes html5shiv\:header{})
       * @private
       * @param {String} cssText The CSS text to shiv.
       * @returns {String} The shived CSS text.
       */
      function shivCssText(cssText) {
        var pair,
          parts = cssText.split('{'),
          index = parts.length,
          reElements = RegExp('(^|[\\s,>+~])(' + getElements().join('|') + ')(?=[[\\s,>+~#.:]|$)', 'gi'),
          replacement = '$1' + shivNamespace + '\\:$2';
 
        while (index--) {
          pair = parts[index] = parts[index].split('}');
          pair[pair.length - 1] = pair[pair.length - 1].replace(reElements, replacement);
          parts[index] = pair.join('}');
        }
        return parts.join('{');
      }
 
      /**
       * Removes the given wrappers, leaving the original elements.
       * @private
       * @params {Array} wrappers An array of printable wrappers.
       */
      function removeWrappers(wrappers) {
        var index = wrappers.length;
        while (index--) {
          wrappers[index].removeNode();
        }
      }
 
      /*--------------------------------------------------------------------------*/
 
      /**
       * Shivs the given document for print.
       * @memberOf html5
       * @param {Document} ownerDocument The document to shiv.
       * @returns {Document} The shived document.
       */
      function shivPrint(ownerDocument) {
        var shivedSheet,
          wrappers,
          data = getExpandoData(ownerDocument),
          namespaces = ownerDocument.namespaces,
          ownerWindow = ownerDocument.parentWindow;
 
        if (!supportsShivableSheets || ownerDocument.printShived) {
          return ownerDocument;
        }
        if (typeof namespaces[shivNamespace] == 'undefined') {
          namespaces.add(shivNamespace);
        }
 
        function removeSheet() {
          clearTimeout(data._removeSheetTimer);
          if (shivedSheet) {
            shivedSheet.removeNode(true);
          }
          shivedSheet= null;
        }
 
        ownerWindow.attachEvent('onbeforeprint', function() {
 
          removeSheet();
 
          var imports,
            length,
            sheet,
            collection = ownerDocument.styleSheets,
            cssText = [],
            index = collection.length,
            sheets = Array(index);
 
          // convert styleSheets collection to an array
          while (index--) {
            sheets[index] = collection[index];
          }
          // concat all style sheet CSS text
          while ((sheet = sheets.pop())) {
            // IE does not enforce a same origin policy for external style sheets...
            // but has trouble with some dynamically created stylesheets
            if (!sheet.disabled && reMedia.test(sheet.media)) {
 
              try {
                imports = sheet.imports;
                length = imports.length;
              } catch(er){
                length = 0;
              }
 
              for (index = 0; index < length; index++) {
                sheets.push(imports[index]);
              }
 
              try {
                cssText.push(sheet.cssText);
              } catch(er){}
            }
          }
 
          // wrap all HTML5 elements with printable elements and add the shived style sheet
          cssText = shivCssText(cssText.reverse().join(''));
          wrappers = addWrappers(ownerDocument);
          shivedSheet = addStyleSheet(ownerDocument, cssText);
 
        });
 
        ownerWindow.attachEvent('onafterprint', function() {
          // remove wrappers, leaving the original elements, and remove the shived style sheet
          removeWrappers(wrappers);
          clearTimeout(data._removeSheetTimer);
          data._removeSheetTimer = setTimeout(removeSheet, 500);
        });
 
        ownerDocument.printShived = true;
        return ownerDocument;
      }
 
      /*--------------------------------------------------------------------------*/
 
      // expose API
      html5.type += ' print';
      html5.shivPrint = shivPrint;
 
      // shiv for print
      shivPrint(document);
 
      if(typeof module == 'object' && module.exports){
        module.exports = html5;
      }
 
    }(typeof window !== 'undefined' ? window : this, document));
  }
 
  return html5;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/html5shiv.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/html5shiv.js

Statements: 9% (9 / 100)      Branches: 0% (0 / 61)      Functions: 0% (0 / 14)      Lines: 9% (9 / 100)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 3392                                                                                                                                                   1                         1                     1                                   1                                   1                                                                       1                                               1                                                                           1                                                                                                                                                                                                                    
define(['isSVG'], function(isSVG) {
/**
  * @optionName html5shiv
  * @optionProp html5shiv
  */
 
  // Take the html5 variable out of the html5shiv scope so we can return it.
  var html5;
  if (!isSVG) {
    /**
     * @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
     */
    ;(function(window, document) {
      /** version */
      var version = '3.7.3';
 
      /** Preset options */
      var options = window.html5 || {};
 
      /** Used to skip problem elements */
      var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;
 
      /** Not all elements can be cloned in IE **/
      var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;
 
      /** Detect whether the browser supports default html5 styles */
      var supportsHtml5Styles;
 
      /** Name of the expando, to work with multiple documents or to re-shiv one document */
      var expando = '_html5shiv';
 
      /** The id for the the documents expando */
      var expanID = 0;
 
      /** Cached data for each document */
      var expandoData = {};
 
      /** Detect whether the browser supports unknown elements */
      var supportsUnknownElements;
 
      (function() {
        try {
          var a = document.createElement('a');
          a.innerHTML = '<xyz></xyz>';
          //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles
          supportsHtml5Styles = ('hidden' in a);
 
          supportsUnknownElements = a.childNodes.length == 1 || (function() {
            // assign a false positive if unable to shiv
            (document.createElement)('a');
            var frag = document.createDocumentFragment();
            return (
              typeof frag.cloneNode == 'undefined' ||
                typeof frag.createDocumentFragment == 'undefined' ||
                typeof frag.createElement == 'undefined'
            );
          }());
        } catch(e) {
          // assign a false positive if detection fails => unable to shiv
          supportsHtml5Styles = true;
          supportsUnknownElements = true;
        }
 
      }());
 
      /*--------------------------------------------------------------------------*/
 
      /**
       * Creates a style sheet with the given CSS text and adds it to the document.
       * @private
       * @param {Document} ownerDocument The document.
       * @param {String} cssText The CSS text.
       * @returns {StyleSheet} The style element.
       */
      function addStyleSheet(ownerDocument, cssText) {
        var p = ownerDocument.createElement('p'),
          parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;
 
        p.innerHTML = 'x<style>' + cssText + '</style>';
        return parent.insertBefore(p.lastChild, parent.firstChild);
      }
 
      /**
       * Returns the value of `html5.elements` as an array.
       * @private
       * @returns {Array} An array of shived element node names.
       */
      function getElements() {
        var elements = html5.elements;
        return typeof elements == 'string' ? elements.split(' ') : elements;
      }
 
      /**
       * Extends the built-in list of html5 elements
       * @memberOf html5
       * @param {String|Array} newElements whitespace separated list or array of new element names to shiv
       * @param {Document} ownerDocument The context document.
       */
      function addElements(newElements, ownerDocument) {
        var elements = html5.elements;
        if(typeof elements != 'string'){
          elements = elements.join(' ');
        }
        if(typeof newElements != 'string'){
          newElements = newElements.join(' ');
        }
        html5.elements = elements +' '+ newElements;
        shivDocument(ownerDocument);
      }
 
      /**
       * Returns the data associated to the given document
       * @private
       * @param {Document} ownerDocument The document.
       * @returns {Object} An object of data.
       */
      function getExpandoData(ownerDocument) {
        var data = expandoData[ownerDocument[expando]];
        if (!data) {
          data = {};
          expanID++;
          ownerDocument[expando] = expanID;
          expandoData[expanID] = data;
        }
        return data;
      }
 
      /**
       * returns a shived element for the given nodeName and document
       * @memberOf html5
       * @param {String} nodeName name of the element
       * @param {Document|DocumentFragment} ownerDocument The context document.
       * @returns {Object} The shived element.
       */
      function createElement(nodeName, ownerDocument, data){
        if (!ownerDocument) {
          ownerDocument = document;
        }
        if(supportsUnknownElements){
          return ownerDocument.createElement(nodeName);
        }
        if (!data) {
          data = getExpandoData(ownerDocument);
        }
        var node;
 
        if (data.cache[nodeName]) {
          node = data.cache[nodeName].cloneNode();
        } else if (saveClones.test(nodeName)) {
          node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();
        } else {
          node = data.createElem(nodeName);
        }
 
        // Avoid adding some elements to fragments in IE < 9 because
        // * Attributes like `name` or `type` cannot be set/changed once an element
        //   is inserted into a document/fragment
        // * Link elements with `src` attributes that are inaccessible, as with
        //   a 403 response, will cause the tab/window to crash
        // * Script elements appended to fragments will execute when their `src`
        //   or `text` property is set
        return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;
      }
 
      /**
       * returns a shived DocumentFragment for the given document
       * @memberOf html5
       * @param {Document} ownerDocument The context document.
       * @returns {Object} The shived DocumentFragment.
       */
      function createDocumentFragment(ownerDocument, data){
        if (!ownerDocument) {
          ownerDocument = document;
        }
        if(supportsUnknownElements){
          return ownerDocument.createDocumentFragment();
        }
        data = data || getExpandoData(ownerDocument);
        var clone = data.frag.cloneNode(),
          i = 0,
          elems = getElements(),
          l = elems.length;
        for(;i<l;i++){
          clone.createElement(elems[i]);
        }
        return clone;
      }
 
      /**
       * Shivs the `createElement` and `createDocumentFragment` methods of the document.
       * @private
       * @param {Document|DocumentFragment} ownerDocument The document.
       * @param {Object} data of the document.
       */
      function shivMethods(ownerDocument, data) {
        if (!data.cache) {
          data.cache = {};
          data.createElem = ownerDocument.createElement;
          data.createFrag = ownerDocument.createDocumentFragment;
          data.frag = data.createFrag();
        }
 
 
        ownerDocument.createElement = function(nodeName) {
          //abort shiv
          if (!html5.shivMethods) {
            return data.createElem(nodeName);
          }
          return createElement(nodeName, ownerDocument, data);
        };
 
        ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +
                                                        'var n=f.cloneNode(),c=n.createElement;' +
                                                        'h.shivMethods&&(' +
                                                        // unroll the `createElement` calls
                                                        getElements().join().replace(/[\w\-:]+/g, function(nodeName) {
                                                          data.createElem(nodeName);
                                                          data.frag.createElement(nodeName);
                                                          return 'c("' + nodeName + '")';
                                                        }) +
          ');return n}'
                                                       )(html5, data.frag);
      }
 
      /*--------------------------------------------------------------------------*/
 
      /**
       * Shivs the given document.
       * @memberOf html5
       * @param {Document} ownerDocument The document to shiv.
       * @returns {Document} The shived document.
       */
      function shivDocument(ownerDocument) {
        if (!ownerDocument) {
          ownerDocument = document;
        }
        var data = getExpandoData(ownerDocument);
 
        if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {
          data.hasCSS = !!addStyleSheet(ownerDocument,
                                        // corrects block display not defined in IE6/7/8/9
                                        'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' +
                                        // adds styling not present in IE6/7/8/9
                                        'mark{background:#FF0;color:#000}' +
                                        // hides non-rendered elements
                                        'template{display:none}'
                                       );
        }
        if (!supportsUnknownElements) {
          shivMethods(ownerDocument, data);
        }
        return ownerDocument;
      }
 
      /*--------------------------------------------------------------------------*/
 
      /**
       * The `html5` object is exposed so that more elements can be shived and
       * existing shiving can be detected on iframes.
       * @type Object
       * @example
       *
       * // options can be changed before the script is included
       * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };
       */
      var html5 = {
 
        /**
         * An array or space separated string of node names of the elements to shiv.
         * @memberOf html5
         * @type Array|String
         */
        'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video',
 
        /**
         * current version of html5shiv
         */
        'version': version,
 
        /**
         * A flag to indicate that the HTML5 style sheet should be inserted.
         * @memberOf html5
         * @type Boolean
         */
        'shivCSS': (options.shivCSS !== false),
 
        /**
         * Is equal to true if a browser supports creating unknown/HTML5 elements
         * @memberOf html5
         * @type boolean
         */
        'supportsUnknownElements': supportsUnknownElements,
 
        /**
         * A flag to indicate that the document's `createElement` and `createDocumentFragment`
         * methods should be overwritten.
         * @memberOf html5
         * @type Boolean
         */
        'shivMethods': (options.shivMethods !== false),
 
        /**
         * A string to describe the type of `html5` object ("default" or "default print").
         * @memberOf html5
         * @type String
         */
        'type': 'default',
 
        // shivs the document according to the specified `html5` object options
        'shivDocument': shivDocument,
 
        //creates a shived element
        createElement: createElement,
 
        //creates a shived documentFragment
        createDocumentFragment: createDocumentFragment,
 
        //extends list of elements
        addElements: addElements
      };
 
      /*--------------------------------------------------------------------------*/
 
      // expose html5
      window.html5 = html5;
 
      // shiv the document
      shivDocument(document);
 
      if(typeof module == 'object' && module.exports){
        module.exports = html5;
      }
 
    }(typeof window !== 'undefined' ? window : this, document));
  }
  return html5;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/injectElementWithStyles.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/injectElementWithStyles.js

Statements: 5.41% (2 / 37)      Branches: 0% (0 / 12)      Functions: 0% (0 / 2)      Lines: 5.41% (2 / 37)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 782                         1                                                                                                                                
define(['ModernizrProto', 'docElement', 'createElement', 'getBody'], function(ModernizrProto, docElement, createElement, getBody) {
  /**
   * injectElementWithStyles injects an element with style element and some CSS rules
   *
   * @access private
   * @function injectElementWithStyles
   * @param {string} rule - String representing a css rule
   * @param {function} callback - A function that is used to test the injected element
   * @param {number} [nodes] - An integer representing the number of additional nodes you want injected
   * @param {string[]} [testnames] - An array of strings that are used as ids for the additional nodes
   * @returns {boolean}
   */
 
  function injectElementWithStyles(rule, callback, nodes, testnames) {
    var mod = 'modernizr';
    var style;
    var ret;
    var node;
    var docOverflow;
    var div = createElement('div');
    var body = getBody();
 
    if (parseInt(nodes, 10)) {
      // In order not to give false positives we create a node for each test
      // This also allows the method to scale for unspecified uses
      while (nodes--) {
        node = createElement('div');
        node.id = testnames ? testnames[nodes] : mod + (nodes + 1);
        div.appendChild(node);
      }
    }
 
    style = createElement('style');
    style.type = 'text/css';
    style.id = 's' + mod;
 
    // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.
    // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270
    (!body.fake ? div : body).appendChild(style);
    body.appendChild(div);
 
    if (style.styleSheet) {
      style.styleSheet.cssText = rule;
    } else {
      style.appendChild(document.createTextNode(rule));
    }
    div.id = mod;
 
    if (body.fake) {
      //avoid crashing IE8, if background image is used
      body.style.background = '';
      //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible
      body.style.overflow = 'hidden';
      docOverflow = docElement.style.overflow;
      docElement.style.overflow = 'hidden';
      docElement.appendChild(body);
    }
 
    ret = callback(div, rule);
    // If this is done after page load we don't want to remove the body so check if body exists
    if (body.fake) {
      body.parentNode.removeChild(body);
      docElement.style.overflow = docOverflow;
      // Trigger layout so kinetic scrolling isn't disabled in iOS6+
      // eslint-disable-next-line
      docElement.offsetHeight;
    } else {
      div.parentNode.removeChild(div);
    }
 
    return !!ret;
 
  }
 
  return injectElementWithStyles;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/inputElem.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/inputElem.js

Statements: 33.33% (1 / 3)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 142                          
define(['createElement'], function(createElement) {
  /**
   * since we have a fairly large number of input tests that don't mutate the input
   * we create a single element that can be shared with all of those tests for a
   * minor perf boost
   *
   * @access private
   * @returns {HTMLInputElement}
   */
  var inputElem = createElement('input');
  return inputElem;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/is.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/is.js

Statements: 50% (2 / 4)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 50% (2 / 4)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 182                     1            
define(function() {
  /**
   * is returns a boolean if the typeof an obj is exactly type.
   *
   * @access private
   * @function is
   * @param {*} obj - A thing we want to check the type of
   * @param {string} type - A string to compare the typeof against
   * @returns {boolean}
   */
 
  function is(obj, type) {
    return typeof obj === type;
  }
  return is;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/isSVG.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/isSVG.js

Statements: 33.33% (1 / 3)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 132                        
define(['docElement'], function(docElement) {
  /**
   * A convenience helper to check if the document we are running in is an SVG document
   *
   * @access private
   * @returns {boolean}
   */
 
  var isSVG = docElement.nodeName.toLowerCase() === 'svg';
  return isSVG;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/load.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/load.js

Statements: 6.67% (1 / 15)      Branches: 0% (0 / 8)      Functions: 0% (0 / 6)      Lines: 6.67% (1 / 15)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 412                                                                                
define(['ModernizrProto'], function(ModernizrProto) {
  /**
   * Previously, Modernizr.load was an alias for yepnope. Since yepnope was
   * deprecated, we removed it as well. It is not available on the website builder,
   * this is only included as an improved warning to those who build a custom
   * version locally.
   *
   * @memberof Modernizr
   * @name Modernizr.load
   * @access private
   * @function load
   *
   */
 
  var err = function() {};
  var warn = function() {};
 
  if (window.console) {
    err = function() {
      var method = console.error ? 'error' : 'log';
      window.console[method].apply(window.console, Array.prototype.slice.call(arguments));
    };
 
    warn = function() {
      var method = console.warn ? 'warn' : 'log';
      window.console[method].apply(window.console, Array.prototype.slice.call(arguments));
    };
  }
 
  ModernizrProto.load = function() {
    if ('yepnope' in window) {
      warn('yepnope.js (aka Modernizr.load) is no longer included as part of Modernizr. yepnope appears to be available on the page, so we’ll use it to handle this call to Modernizr.load, but please update your code to use yepnope directly.\n See http://github.com/Modernizr/Modernizr/issues/1182 for more information.');
      window.yepnope.apply(window, [].slice.call(arguments, 0));
    } else {
      err('yepnope.js (aka Modernizr.load) is no longer included as part of Modernizr. Get it from http://yepnopejs.com. See http://github.com/Modernizr/Modernizr/issues/1182 for more information.');
    }
  };
 
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/mStyle.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/mStyle.js

Statements: 20% (1 / 5)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 20% (1 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 152                            
define(['Modernizr', 'modElem'], function(Modernizr, modElem) {
  var mStyle = {
    style: modElem.elem.style
  };
 
  // kill ref for gc, must happen before mod.elem is removed, so we unshift on to
  // the front of the queue.
  Modernizr._q.unshift(function() {
    delete mStyle.style;
  });
 
  return mStyle;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/modElem.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/modElem.js

Statements: 20% (1 / 5)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 20% (1 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 202                                      
define(['Modernizr', 'createElement'], function(Modernizr, createElement) {
  /**
   * Create our "modernizr" element that we do most feature tests on.
   *
   * @access private
   */
 
  var modElem = {
    elem: createElement('modernizr')
  };
 
  // Clean up this element
  Modernizr._q.push(function() {
    delete modElem.elem;
  });
 
  return modElem;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/mq.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/mq.js

Statements: 7.14% (1 / 14)      Branches: 0% (0 / 9)      Functions: 0% (0 / 5)      Lines: 7.14% (1 / 14)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 772                                                                                                                                                        
define(['ModernizrProto', 'injectElementWithStyles'], function(ModernizrProto, injectElementWithStyles) {
  /**
   * Modernizr.mq tests a given media query, live against the current state of the window
   * adapted from matchMedia polyfill by Scott Jehl and Paul Irish
   * gist.github.com/786768
   *
   * @memberof Modernizr
   * @name Modernizr.mq
   * @optionName Modernizr.mq()
   * @optionProp mq
   * @access public
   * @function mq
   * @param {string} mq - String of the media query we want to test
   * @returns {boolean}
   * @example
   * Modernizr.mq allows for you to programmatically check if the current browser
   * window state matches a media query.
   *
   * ```js
   *  var query = Modernizr.mq('(min-width: 900px)');
   *
   *  if (query) {
   *    // the browser window is larger than 900px
   *  }
   * ```
   *
   * Only valid media queries are supported, therefore you must always include values
   * with your media query
   *
   * ```js
   * // good
   *  Modernizr.mq('(min-width: 900px)');
   *
   * // bad
   *  Modernizr.mq('min-width');
   * ```
   *
   * If you would just like to test that media queries are supported in general, use
   *
   * ```js
   *  Modernizr.mq('only all'); // true if MQ are supported, false if not
   * ```
   *
   *
   * Note that if the browser does not support media queries (e.g. old IE) mq will
   * always return false.
   */
 
  var mq = (function() {
    var matchMedia = window.matchMedia || window.msMatchMedia;
    if (matchMedia) {
      return function(mq) {
        var mql = matchMedia(mq);
        return mql && mql.matches || false;
      };
    }
 
    return function(mq) {
      var bool = false;
 
      injectElementWithStyles('@media ' + mq + ' { #modernizr { position: absolute; } }', function(node) {
        bool = (window.getComputedStyle ?
                window.getComputedStyle(node, null) :
                node.currentStyle).position == 'absolute';
      });
 
      return bool;
    };
  })();
 
 
  ModernizrProto.mq = mq;
 
  return mq;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/nativeTestProps.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/nativeTestProps.js

Statements: 11.76% (2 / 17)      Branches: 0% (0 / 8)      Functions: 0% (0 / 3)      Lines: 11.76% (2 / 17)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 442                           1                                                          
define(['injectElementWithStyles', 'domToCSS', 'computedStyle'], function(injectElementWithStyles, domToCSS, computedStyle) {
  /**
   * nativeTestProps allows for us to use native feature detection functionality if available.
   * some prefixed form, or false, in the case of an unsupported rule
   *
   * @access private
   * @function nativeTestProps
   * @param {array} props - An array of property names
   * @param {string} value - A string representing the value we want to check via @supports
   * @returns {boolean|undefined} A boolean when @supports exists, undefined otherwise
   */
 
  // Accepts a list of property names and a single value
  // Returns `undefined` if native detection not available
  function nativeTestProps(props, value) {
    var i = props.length;
    // Start with the JS API: http://www.w3.org/TR/css3-conditional/#the-css-interface
    if ('CSS' in window && 'supports' in window.CSS) {
      // Try every prefixed variant of the property
      while (i--) {
        if (window.CSS.supports(domToCSS(props[i]), value)) {
          return true;
        }
      }
      return false;
    }
    // Otherwise fall back to at-rule (for Opera 12.x)
    else if ('CSSSupportsRule' in window) {
      // Build a condition string for every prefixed variant
      var conditionText = [];
      while (i--) {
        conditionText.push('(' + domToCSS(props[i]) + ':' + value + ')');
      }
      conditionText = conditionText.join(' or ');
      return injectElementWithStyles('@supports (' + conditionText + ') { #modernizr { position: absolute; } }', function(node) {
        return computedStyle(node, null, 'position') == 'absolute';
      });
    }
    return undefined;
  }
  return nativeTestProps;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/omPrefixes.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/omPrefixes.js

Statements: 33.33% (1 / 3)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 222                                          
define(function() {
  /**
   * If the browsers follow the spec, then they would expose vendor-specific styles as:
   *   elem.style.WebkitBorderRadius
   * instead of something like the following (which is technically incorrect):
   *   elem.style.webkitBorderRadius
 
   * WebKit ghosts their properties in lowercase but Opera & Moz do not.
   * Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+
   *   erik.eae.net/archives/2008/03/10/21.48.10/
 
   * More here: github.com/Modernizr/Modernizr/issues/issue/21
   *
   * @access private
   * @returns {string} The string representing the vendor-specific style properties
   */
 
  var omPrefixes = 'Moz O ms Webkit';
  return omPrefixes;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/prefixed.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/prefixed.js

Statements: 10% (1 / 10)      Branches: 0% (0 / 6)      Functions: 0% (0 / 2)      Lines: 10% (1 / 10)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 872                                                                                                                                                                            
define(['ModernizrProto', 'testPropsAll', 'cssToDOM', 'atRule'], function(ModernizrProto, testPropsAll, cssToDOM, atRule) {
  /**
   * prefixed returns the prefixed or nonprefixed property name variant of your input
   *
   * @memberof Modernizr
   * @name Modernizr.prefixed
   * @optionName Modernizr.prefixed()
   * @optionProp prefixed
   * @access public
   * @function prefixed
   * @param {string} prop - String name of the property to test for
   * @param {object} [obj] - An object to test for the prefixed properties on
   * @param {HTMLElement} [elem] - An element used to test specific properties against
   * @returns {string|false} The string representing the (possibly prefixed) valid
   * version of the property, or `false` when it is unsupported.
   * @example
   *
   * Modernizr.prefixed takes a string css value in the DOM style camelCase (as
   * opposed to the css style kebab-case) form and returns the (possibly prefixed)
   * version of that property that the browser actually supports.
   *
   * For example, in older Firefox...
   * ```js
   * prefixed('boxSizing')
   * ```
   * returns 'MozBoxSizing'
   *
   * In newer Firefox, as well as any other browser that support the unprefixed
   * version would simply return `boxSizing`. Any browser that does not support
   * the property at all, it will return `false`.
   *
   * By default, prefixed is checked against a DOM element. If you want to check
   * for a property on another object, just pass it as a second argument
   *
   * ```js
   * var rAF = prefixed('requestAnimationFrame', window);
   *
   * raf(function() {
   *  renderFunction();
   * })
   * ```
   *
   * Note that this will return _the actual function_ - not the name of the function.
   * If you need the actual name of the property, pass in `false` as a third argument
   *
   * ```js
   * var rAFProp = prefixed('requestAnimationFrame', window, false);
   *
   * rafProp === 'WebkitRequestAnimationFrame' // in older webkit
   * ```
   *
   * One common use case for prefixed is if you're trying to determine which transition
   * end event to bind to, you might do something like...
   * ```js
   * var transEndEventNames = {
   *     'WebkitTransition' : 'webkitTransitionEnd', * Saf 6, Android Browser
   *     'MozTransition'    : 'transitionend',       * only for FF < 15
   *     'transition'       : 'transitionend'        * IE10, Opera, Chrome, FF 15+, Saf 7+
   * };
   *
   * var transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];
   * ```
   *
   * If you want a similar lookup, but in kebab-case, you can use [prefixedCSS](#modernizr-prefixedcss).
   */
 
  var prefixed = ModernizrProto.prefixed = function(prop, obj, elem) {
    if (prop.indexOf('@') === 0) {
      return atRule(prop);
    }
 
    if (prop.indexOf('-') != -1) {
      // Convert kebab-case to camelCase
      prop = cssToDOM(prop);
    }
    if (!obj) {
      return testPropsAll(prop, 'pfx');
    } else {
      // Testing DOM property e.g. Modernizr.prefixed('requestAnimationFrame', window) // 'mozRequestAnimationFrame'
      return testPropsAll(prop, obj, elem);
    }
  };
 
  return prefixed;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/prefixedCSS.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/prefixedCSS.js

Statements: 20% (1 / 5)      Branches: 0% (0 / 2)      Functions: 0% (0 / 2)      Lines: 20% (1 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 372                                                                        
define(['ModernizrProto', 'prefixed', 'domToCSS'], function(ModernizrProto, prefixed, domToCSS) {
  /**
   * prefixedCSS is just like [prefixed](#modernizr-prefixed), but the returned values are in
   * kebab-case (e.g. `box-sizing`) rather than camelCase (boxSizing).
   *
   * @memberof Modernizr
   * @name Modernizr.prefixedCSS
   * @optionName Modernizr.prefixedCSS()
   * @optionProp prefixedCSS
   * @access public
   * @function prefixedCSS
   * @param {string} prop - String name of the property to test for
   * @returns {string|false} The string representing the (possibly prefixed)
   * valid version of the property, or `false` when it is unsupported.
   * @example
   *
   * `Modernizr.prefixedCSS` is like `Modernizr.prefixed`, but returns the result
   * in hyphenated form
   *
   * ```js
   * Modernizr.prefixedCSS('transition') // '-moz-transition' in old Firefox
   * ```
   *
   * Since it is only useful for CSS style properties, it can only be tested against
   * an HTMLElement.
   *
   * Properties can be passed as both the DOM style camelCase or CSS style kebab-case.
   */
 
  var prefixedCSS = ModernizrProto.prefixedCSS = function(prop) {
    var prefixedProp = prefixed(prop);
    return prefixedProp && domToCSS(prefixedProp);
  };
  return prefixedCSS;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/prefixedCSSValue.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/prefixedCSSValue.js

Statements: 5.88% (1 / 17)      Branches: 0% (0 / 6)      Functions: 0% (0 / 2)      Lines: 5.88% (1 / 17)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 532                                                                                                        
define(['ModernizrProto', 'domPrefixes', 'createElement'], function(ModernizrProto, domPrefixes, createElement) {
  /**
   * prefixedCSSValue is a way test for prefixed css properties (e.g. display: -webkit-flex)
   *
   * @memberof Modernizr
   * @name Modernizr.prefixedCSSValue
   * @optionName Modernizr.prefixedCSSValue()
   * @optionProp prefixedCSSValue
   * @access public
   * @function prefixedCSSValue
   * @param {string} prop - String name of the property to test for
   * @param {string} value - String value of the non prefixed version of the value you want to test for
   * @returns {string|false} The string representing the (possibly prefixed)
   * valid version of the property, or `false` when it is unsupported.
   * @example
   *
   * `Modernizr.prefixedCSSValue` is a way test for prefixed css properties (e.g. display: -webkit-flex)
   *
   * ```js
   * Modernizr.prefixedCSSValue('background', 'linear-gradient(left, red, red)')
   * ```
   *
   */
 
  var prefixedCSSValue = function(prop, value) {
    var result = false;
    var elem = createElement('div');
    var style = elem.style;
 
    if (prop in style) {
      var i = domPrefixes.length;
 
      style[prop] = value;
      result = style[prop];
 
      while (i-- && !result) {
        style[prop] = '-' + domPrefixes[i] + '-' + value;
        result = style[prop];
      }
    }
 
    if (result === '') {
      result = false;
    }
 
    return result;
  };
 
  ModernizrProto.prefixedCSSValue = prefixedCSSValue;
  return prefixedCSSValue;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/prefixes.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/prefixes.js

Statements: 25% (1 / 4)      Branches: 0% (0 / 2)      Functions: 0% (0 / 1)      Lines: 25% (1 / 4)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 442                                                                                      
define(['ModernizrProto'], function(ModernizrProto) {
  /**
   * List of property values to set for css tests. See ticket #21
   * http://git.io/vUGl4
   *
   * @memberof Modernizr
   * @name Modernizr._prefixes
   * @optionName Modernizr._prefixes
   * @optionProp prefixes
   * @access public
   * @example
   *
   * Modernizr._prefixes is the internal list of prefixes that we test against
   * inside of things like [prefixed](#modernizr-prefixed) and [prefixedCSS](#-code-modernizr-prefixedcss). It is simply
   * an array of kebab-case vendor prefixes you can use within your code.
   *
   * Some common use cases include
   *
   * Generating all possible prefixed version of a CSS property
   * ```js
   * var rule = Modernizr._prefixes.join('transform: rotate(20deg); ');
   *
   * rule === 'transform: rotate(20deg); webkit-transform: rotate(20deg); moz-transform: rotate(20deg); o-transform: rotate(20deg); ms-transform: rotate(20deg);'
   * ```
   *
   * Generating all possible prefixed version of a CSS value
   * ```js
   * rule = 'display:' +  Modernizr._prefixes.join('flex; display:') + 'flex';
   *
   * rule === 'display:flex; display:-webkit-flex; display:-moz-flex; display:-o-flex; display:-ms-flex; display:flex'
   * ```
   */
 
  // we use ['',''] rather than an empty array in order to allow a pattern of .`join()`ing prefixes to test
  // values in feature detects to continue to work
  var prefixes = (ModernizrProto._config.usePrefixes ? ' -webkit- -moz- -o- -ms- '.split(' ') : ['','']);
 
  // expose these for the plugin API. Look in the source for how to join() them against your input
  ModernizrProto._prefixes = prefixes;
 
  return prefixes;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/roundedEquals.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/roundedEquals.js

Statements: 50% (2 / 4)      Branches: 0% (0 / 3)      Functions: 0% (0 / 2)      Lines: 50% (2 / 4)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 192                     1              
define(function() {
  /**
   * roundedEquals takes two integers and checks if the first is within 1 of the second
   *
   * @access private
   * @function roundedEquals
   * @param {number} a
   * @param {number} b
   * @returns {boolean}
   */
 
  function roundedEquals(a, b) {
    return a - 1 === b || a === b || a + 1 === b;
  }
 
  return roundedEquals;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/setClasses.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/setClasses.js

Statements: 13.33% (2 / 15)      Branches: 0% (0 / 10)      Functions: 0% (0 / 2)      Lines: 13.33% (2 / 15)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 422                     1                                                            
define(['Modernizr', 'docElement', 'isSVG'], function(Modernizr, docElement, isSVG) {
  /**
   * setClasses takes an array of class names and adds them to the root element
   *
   * @access private
   * @function setClasses
   * @param {string[]} classes - Array of class names
   */
 
  // Pass in an and array of class names, e.g.:
  //  ['no-webp', 'borderradius', ...]
  function setClasses(classes) {
    var className = docElement.className;
    var classPrefix = Modernizr._config.classPrefix || '';
 
    if (isSVG) {
      className = className.baseVal;
    }
 
    // Change `no-js` to `js` (independently of the `enableClasses` option)
    // Handle classPrefix on this too
    if (Modernizr._config.enableJSClass) {
      var reJS = new RegExp('(^|\\s)' + classPrefix + 'no-js(\\s|$)');
      className = className.replace(reJS, '$1' + classPrefix + 'js$2');
    }
 
    if (Modernizr._config.enableClasses) {
      // Add the new classes
      className += ' ' + classPrefix + classes.join(' ' + classPrefix);
      if (isSVG) {
        docElement.className.baseVal = className;
      } else {
        docElement.className = className;
      }
    }
 
  }
 
  return setClasses;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/slice.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/slice.js

Statements: 33.33% (1 / 3)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 142                          
define(['classes'], function(classes) {
  /**
   * slice exposes Array.prototype.slice to convert array-like objects to actual
   * arrays in a compact format without recreating new arrays over and over again
   * (which leads to decreased performance)
   *
   * @access private
   */
 
  var slice = classes.slice;
  return slice;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/testAllProps.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/testAllProps.js

Statements: 40% (2 / 5)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 40% (2 / 5)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 462                                                                           1              
define(['ModernizrProto', 'testPropsAll'], function(ModernizrProto, testPropsAll) {
  /**
   * testAllProps determines whether a given CSS property is supported in the browser
   *
   * @memberof Modernizr
   * @name Modernizr.testAllProps
   * @optionName Modernizr.testAllProps()
   * @optionProp testAllProps
   * @access public
   * @function testAllProps
   * @param {string} prop - String naming the property to test (either camelCase or kebab-case)
   * @param {string} [value] - String of the value to test
   * @param {boolean} [skipValueTest=false] - Whether to skip testing that the value is supported when using non-native detection
   * @example
   *
   * testAllProps determines whether a given CSS property, in some prefixed form,
   * is supported by the browser.
   *
   * ```js
   * testAllProps('boxSizing')  // true
   * ```
   *
   * It can optionally be given a CSS value in string form to test if a property
   * value is valid
   *
   * ```js
   * testAllProps('display', 'block') // true
   * testAllProps('display', 'penguin') // false
   * ```
   *
   * A boolean can be passed as a third parameter to skip the value check when
   * native detection (@supports) isn't available.
   *
   * ```js
   * testAllProps('shapeOutside', 'content-box', true);
   * ```
   */
 
  function testAllProps(prop, value, skipValueTest) {
    return testPropsAll(prop, undefined, undefined, value, skipValueTest);
  }
  ModernizrProto.testAllProps = testAllProps;
  return testAllProps;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/testDOMProps.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/testDOMProps.js

Statements: 15.38% (2 / 13)      Branches: 0% (0 / 8)      Functions: 0% (0 / 2)      Lines: 15.38% (2 / 13)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 422                       1                                                          
define(['is', 'fnBind'], function(is, fnBind) {
  /**
   * testDOMProps is a generic DOM property test; if a browser supports
   *   a certain property, it won't return undefined for it.
   *
   * @access private
   * @function testDOMProps
   * @param {array.<string>} props - An array of properties to test for
   * @param {object} obj - An object or Element you want to use to test the parameters again
   * @param {boolean|object} elem - An Element to bind the property lookup again. Use `false` to prevent the check
   * @returns {false|*} returns false if the prop is unsupported, otherwise the value that is supported
   */
  function testDOMProps(props, obj, elem) {
    var item;
 
    for (var i in props) {
      if (props[i] in obj) {
 
        // return the property name as a string
        if (elem === false) {
          return props[i];
        }
 
        item = obj[props[i]];
 
        // let's bind a function
        if (is(item, 'function')) {
          // bind to obj unless overriden
          return fnBind(item, elem || obj);
        }
 
        // return the unbound function or obj or value
        return item;
      }
    }
    return false;
  }
 
  return testDOMProps;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/testProp.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/testProp.js

Statements: 25% (1 / 4)      Branches: 100% (0 / 0)      Functions: 0% (0 / 2)      Lines: 25% (1 / 4)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 422                                                                                  
define(['ModernizrProto', 'testProps'], function(ModernizrProto, testProps) {
  /**
   * testProp() investigates whether a given style property is recognized
   * Property names can be provided in either camelCase or kebab-case.
   *
   * @memberof Modernizr
   * @name Modernizr.testProp
   * @access public
   * @optionName Modernizr.testProp()
   * @optionProp testProp
   * @function testProp
   * @param {string} prop - Name of the CSS property to check
   * @param {string} [value] - Name of the CSS value to check
   * @param {boolean} [useValue] - Whether or not to check the value if @supports isn't supported
   * @returns {boolean}
   * @example
   *
   * Just like [testAllProps](#modernizr-testallprops), only it does not check any vendor prefixed
   * version of the string.
   *
   * Note that the property name must be provided in camelCase (e.g. boxSizing not box-sizing)
   *
   * ```js
   * Modernizr.testProp('pointerEvents')  // true
   * ```
   *
   * You can also provide a value as an optional second argument to check if a
   * specific value is supported
   *
   * ```js
   * Modernizr.testProp('pointerEvents', 'none') // true
   * Modernizr.testProp('pointerEvents', 'penguin') // false
   * ```
   */
 
  var testProp = ModernizrProto.testProp = function(prop, value, useValue) {
    return testProps([prop], undefined, value, useValue);
  };
  return testProp;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/testProps.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/testProps.js

Statements: 8.57% (3 / 35)      Branches: 0% (0 / 24)      Functions: 0% (0 / 3)      Lines: 8.57% (3 / 35)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 972                           1                                                         1                                                                                                          
define(['contains', 'mStyle', 'createElement', 'nativeTestProps', 'is', 'cssToDOM'], function(contains, mStyle, createElement, nativeTestProps, is, cssToDOM) {
  // testProps is a generic CSS / DOM property test.
 
  // In testing support for a given CSS property, it's legit to test:
  //    `elem.style[styleName] !== undefined`
  // If the property is supported it will return an empty string,
  // if unsupported it will return undefined.
 
  // We'll take advantage of this quick test and skip setting a style
  // on our modernizr element, but instead just testing undefined vs
  // empty string.
 
  // Property names can be provided in either camelCase or kebab-case.
 
  function testProps(props, prefixed, value, skipValueTest) {
    skipValueTest = is(skipValueTest, 'undefined') ? false : skipValueTest;
 
    // Try native detect first
    if (!is(value, 'undefined')) {
      var result = nativeTestProps(props, value);
      if (!is(result, 'undefined')) {
        return result;
      }
    }
 
    // Otherwise do it properly
    var afterInit, i, propsLength, prop, before;
 
    // If we don't have a style element, that means we're running async or after
    // the core tests, so we'll need to create our own elements to use
 
    // inside of an SVG element, in certain browsers, the `style` element is only
    // defined for valid tags. Therefore, if `modernizr` does not have one, we
    // fall back to a less used element and hope for the best.
    // for strict XHTML browsers the hardly used samp element is used
    var elems = ['modernizr', 'tspan', 'samp'];
    while (!mStyle.style && elems.length) {
      afterInit = true;
      mStyle.modElem = createElement(elems.shift());
      mStyle.style = mStyle.modElem.style;
    }
 
    // Delete the objects if we created them.
    function cleanElems() {
      if (afterInit) {
        delete mStyle.style;
        delete mStyle.modElem;
      }
    }
 
    propsLength = props.length;
    for (i = 0; i < propsLength; i++) {
      prop = props[i];
      before = mStyle.style[prop];
 
      if (contains(prop, '-')) {
        prop = cssToDOM(prop);
      }
 
      if (mStyle.style[prop] !== undefined) {
 
        // If value to test has been passed in, do a set-and-check test.
        // 0 (integer) is a valid property value, so check that `value` isn't
        // undefined, rather than just checking it's truthy.
        if (!skipValueTest && !is(value, 'undefined')) {
 
          // Needs a try catch block because of old IE. This is slow, but will
          // be avoided in most cases because `skipValueTest` will be used.
          try {
            mStyle.style[prop] = value;
          } catch (e) {}
 
          // If the property value has changed, we assume the value used is
          // supported. If `value` is empty string, it'll fail here (because
          // it hasn't changed), which matches how browsers have implemented
          // CSS.supports()
          if (mStyle.style[prop] != before) {
            cleanElems();
            return prefixed == 'pfx' ? prop : true;
          }
        }
        // Otherwise just return true, or the property name if this is a
        // `prefixed()` call
        else {
          cleanElems();
          return prefixed == 'pfx' ? prop : true;
        }
      }
    }
    cleanElems();
    return false;
  }
 
  return testProps;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/testPropsAll.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/testPropsAll.js

Statements: 22.22% (2 / 9)      Branches: 0% (0 / 4)      Functions: 0% (0 / 2)      Lines: 22.22% (2 / 9)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 432                               1                                                    
define(['ModernizrProto', 'cssomPrefixes', 'is', 'testProps', 'domPrefixes', 'testDOMProps'], function(ModernizrProto, cssomPrefixes, is, testProps, domPrefixes, testDOMProps) {
  /**
   * testPropsAll tests a list of DOM properties we want to check against.
   * We specify literally ALL possible (known and/or likely) properties on
   * the element including the non-vendor prefixed one, for forward-
   * compatibility.
   *
   * @access private
   * @function testPropsAll
   * @param {string} prop - A string of the property to test for
   * @param {string|object} [prefixed] - An object to check the prefixed properties on. Use a string to skip
   * @param {HTMLElement|SVGElement} [elem] - An element used to test the property and value against
   * @param {string} [value] - A string of a css value
   * @param {boolean} [skipValueTest] - An boolean representing if you want to test if value sticks when set
   * @returns {false|string} returns the string version of the property, or false if it is unsupported
   */
  function testPropsAll(prop, prefixed, elem, value, skipValueTest) {
 
    var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1),
      props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');
 
    // did they call .prefixed('boxSizing') or are we just testing a prop?
    if (is(prefixed, 'string') || is(prefixed, 'undefined')) {
      return testProps(props, prefixed, value, skipValueTest);
 
      // otherwise, they called .prefixed('requestAnimationFrame', window[, elem])
    } else {
      props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');
      return testDOMProps(props, prefixed, elem);
    }
  }
 
  // Modernizr.testAllProps() investigates whether a given style property,
  // or any of its vendor-prefixed variants, is recognized
  //
  // Note that the property names must be provided in the camelCase variant.
  // Modernizr.testAllProps('boxSizing')
  ModernizrProto.testAllProps = testPropsAll;
 
  return testPropsAll;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/testRunner.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/testRunner.js

Statements: 6.9% (2 / 29)      Branches: 0% (0 / 19)      Functions: 0% (0 / 2)      Lines: 6.9% (2 / 29)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 732             1                                                                                                                                  
define(['tests', 'Modernizr', 'classes', 'is'], function(tests, Modernizr, classes, is) {
  /**
   * Run through all tests and detect their support in the current UA.
   *
   * @access private
   */
 
  function testRunner() {
    var featureNames;
    var feature;
    var aliasIdx;
    var result;
    var nameIdx;
    var featureName;
    var featureNameSplit;
 
    for (var featureIdx in tests) {
      if (tests.hasOwnProperty(featureIdx)) {
        featureNames = [];
        feature = tests[featureIdx];
        // run the test, throw the return value into the Modernizr,
        // then based on that boolean, define an appropriate className
        // and push it into an array of classes we'll join later.
        //
        // If there is no name, it's an 'async' test that is run,
        // but not directly added to the object. That should
        // be done with a post-run addTest call.
        if (feature.name) {
          featureNames.push(feature.name.toLowerCase());
 
          if (feature.options && feature.options.aliases && feature.options.aliases.length) {
            // Add all the aliases into the names list
            for (aliasIdx = 0; aliasIdx < feature.options.aliases.length; aliasIdx++) {
              featureNames.push(feature.options.aliases[aliasIdx].toLowerCase());
            }
          }
        }
 
        // Run the test, or use the raw value if it's not a function
        result = is(feature.fn, 'function') ? feature.fn() : feature.fn;
 
 
        // Set each of the names on the Modernizr object
        for (nameIdx = 0; nameIdx < featureNames.length; nameIdx++) {
          featureName = featureNames[nameIdx];
          // Support dot properties as sub tests. We don't do checking to make sure
          // that the implied parent tests have been added. You must call them in
          // order (either in the test, or make the parent test a dependency).
          //
          // Cap it to TWO to make the logic simple and because who needs that kind of subtesting
          // hashtag famous last words
          featureNameSplit = featureName.split('.');
 
          if (featureNameSplit.length === 1) {
            Modernizr[featureNameSplit[0]] = result;
          } else {
            // cast to a Boolean, if not one already
            if (Modernizr[featureNameSplit[0]] && !(Modernizr[featureNameSplit[0]] instanceof Boolean)) {
              Modernizr[featureNameSplit[0]] = new Boolean(Modernizr[featureNameSplit[0]]);
            }
 
            Modernizr[featureNameSplit[0]][featureNameSplit[1]] = result;
          }
 
          classes.push((result ? '' : 'no-') + featureNameSplit.join('-'));
        }
      }
    }
  }
  return testRunner;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/testStyles.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/testStyles.js

Statements: 33.33% (1 / 3)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 632                                                                                                                            
define(['ModernizrProto', 'injectElementWithStyles'], function(ModernizrProto, injectElementWithStyles) {
  /**
   * testStyles injects an element with style element and some CSS rules
   *
   * @memberof Modernizr
   * @name Modernizr.testStyles
   * @optionName Modernizr.testStyles()
   * @optionProp testStyles
   * @access public
   * @function testStyles
   * @param {string} rule - String representing a css rule
   * @param {function} callback - A function that is used to test the injected element
   * @param {number} [nodes] - An integer representing the number of additional nodes you want injected
   * @param {string[]} [testnames] - An array of strings that are used as ids for the additional nodes
   * @returns {boolean}
   * @example
   *
   * `Modernizr.testStyles` takes a CSS rule and injects it onto the current page
   * along with (possibly multiple) DOM elements. This lets you check for features
   * that can not be detected by simply checking the [IDL](https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Interface_development_guide/IDL_interface_rules).
   *
   * ```js
   * Modernizr.testStyles('#modernizr { width: 9px; color: papayawhip; }', function(elem, rule) {
   *   // elem is the first DOM node in the page (by default #modernizr)
   *   // rule is the first argument you supplied - the CSS rule in string form
   *
   *   addTest('widthworks', elem.style.width === '9px')
   * });
   * ```
   *
   * If your test requires multiple nodes, you can include a third argument
   * indicating how many additional div elements to include on the page. The
   * additional nodes are injected as children of the `elem` that is returned as
   * the first argument to the callback.
   *
   * ```js
   * Modernizr.testStyles('#modernizr {width: 1px}; #modernizr2 {width: 2px}', function(elem) {
   *   document.getElementById('modernizr').style.width === '1px'; // true
   *   document.getElementById('modernizr2').style.width === '2px'; // true
   *   elem.firstChild === document.getElementById('modernizr2'); // true
   * }, 1);
   * ```
   *
   * By default, all of the additional elements have an ID of `modernizr[n]`, where
   * `n` is its index (e.g. the first additional, second overall is `#modernizr2`,
   * the second additional is `#modernizr3`, etc.).
   * If you want to have more meaningful IDs for your function, you can provide
   * them as the fourth argument, as an array of strings
   *
   * ```js
   * Modernizr.testStyles('#foo {width: 10px}; #bar {height: 20px}', function(elem) {
   *   elem.firstChild === document.getElementById('foo'); // true
   *   elem.lastChild === document.getElementById('bar'); // true
   * }, 2, ['foo', 'bar']);
   * ```
   *
   */
 
  var testStyles = ModernizrProto.testStyles = injectElementWithStyles;
  return testStyles;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/testXhrType.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/testXhrType.js

Statements: 90.91% (10 / 11)      Branches: 100% (4 / 4)      Functions: 50% (1 / 2)      Lines: 90.91% (10 / 11)      Ignored: 9 statements, 1 function, 4 branches     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 302                       1 1 1   1 1 1 1   1   1            
define(function() {
  /**
   * http://mathiasbynens.be/notes/xhr-responsetype-json#comment-4
   *
   * @access private
   * @function testXhrType
   * @param {string} type - String name of the XHR type you want to detect
   * @returns {boolean}
   * @author Mathias Bynens
   */
 
  /* istanbul ignore next */
  var testXhrType = function(type) {
    if (typeof XMLHttpRequest == 'undefined') {
      return false;
    }
    var xhr = new XMLHttpRequest();
    xhr.open('get', '/', true);
    try {
      xhr.responseType = type;
    } catch (error) {
      return false;
    }
    return 'response' in xhr && xhr.responseType == type;
  };
 
  return testXhrType;
});
 
 
Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/toStringFn.js

npmtest-modernizr (v2017.4.26)

Code coverage report for node-npmtest-modernizr/node_modules/modernizr/src/toStringFn.js

Statements: 33.33% (1 / 3)      Branches: 100% (0 / 0)      Functions: 0% (0 / 1)      Lines: 33.33% (1 / 3)      Ignored: none     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 162                              
define(function() {
  /**
   * Object.prototype.toString can be used with every object and allows you to
   * get its class easily. Abstracting it off of an object prevents situations
   * where the toString property has been overridden
   *
   * @access private
   * @function toStringFn
   * @returns {function} An abstracted toString function
   */
 
  var toStringFn = ({}).toString;
  return toStringFn;
});